HP-UX ***** B.11.23 U ia64 **** licencja nieograniczonego użytkownika
find . -type d -name *log* | xargs ls -la
daje mi nazwy katalogów (te, które zawierają log
nazwę katalogu), a następnie wszystkie pliki w tym katalogu.
Katalogi /var/opt/SID/application_a/log/
, /var/opt/SID/application_b/log/
, /var/opt/SID/application_c/log/
i tak dalej zawierać pliki dziennika.
Chcę, aby polecenie zawierało tylko dwa najnowsze pliki dziennika ls
, których zwykle używam ls -latr | tail -2
.
Wynik musi być mniej więcej taki ...
/var/opt/SID/application_a/log/
-rw-rw-rw- 1 user1 user1 59698 Jun 11 2013 log1
-rw-rw-rw- 1 user1 user1 59698 Jun 10 2013 log2
/var/opt/SID/application_b/log/
-rw-rw-rw- 1 user1 user1 59698 Jun 11 2013 log1
-rw-rw-rw- 1 user1 user1 59698 Jun 10 2013 log2
/var/opt/SID/application_c/log/
-rw-rw-rw- 1 user1 user1 59698 Jun 11 2013 log1
-rw-rw-rw- 1 user1 user1 59698 Jun 10 2013 log2
find . -type d -name *log* | xargs ls -la | tail -2
nie daje mi powyższego wyniku. Dostaję listę ostatnich dwóch plików
find . -type d -name *log* | xargs ls -la
poleceń.
Czy mogę przesyłać polecenia po potoku xargs
? Jak inaczej zapytać, aby uzyskać wynikową listę plików w powyższym formacie?
find . -type d -name *log* | xargs sh -c "ls -ltr | tail -10"
daje mi listę dziesięciu nazw katalogów w bieżącym katalogu, który akurat jest /var/opt/SID
i nie jest to również to, czego chcę.
sh -c
spodziewa się , że nazwa polecenia (parametr 0) będzie drugim argumentem, więc powinieneś zawsze to robić find . -type d -name *log* | xargs sh -c "ls -ltr | tail -10" lstail
(zwróć uwagę lstail
na końcu, który będzie służył jak $0
dla utworzonej powłoki). W przeciwnym razie pierwszy z wyników wypełni tę rolę i pozostanie niewykorzystany.
*log*
przeciwnym razie powłoka go rozszerzy.