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ą lognazwę 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 -2nie daje mi powyższego wyniku. Dostaję listę ostatnich dwóch plików
find . -type d -name *log* | xargs ls -lapoleceń.
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/SIDi nie jest to również to, czego chcę.
sh -cspodziewa 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ę lstailna końcu, który będzie służył jak $0dla utworzonej powłoki). W przeciwnym razie pierwszy z wyników wypełni tę rolę i pozostanie niewykorzystany.
*log*przeciwnym razie powłoka go rozszerzy.