HP-UX ***** B.11.23 U ia64 **** Lizenz für unbegrenzte Benutzer
find . -type d -name *log* | xargs ls -la
gibt mir die Verzeichnisnamen (die log
im Verzeichnisnamen enthalten sind ), gefolgt von allen Dateien in diesem Verzeichnis.
Die Verzeichnisse /var/opt/SID/application_a/log/
, /var/opt/SID/application_b/log/
, /var/opt/SID/application_c/log/
usw. Protokolldateien enthalten.
Ich möchte, dass nur die zwei neuesten Protokolldateien vom ls
Befehl aufgelistet werden , den ich normalerweise verwende ls -latr | tail -2
.
Die Ausgabe muss ungefähr so sein ..
/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
gibt mir das obige ergebnis nicht. Was ich bekomme, ist eine Liste der letzten beiden
find . -type d -name *log* | xargs ls -la
Befehlsdateien.
Kann ich also Befehle nach einer Pipe weiterleiten xargs
? Wie frage ich sonst ab, um die resultierende Liste der Dateien im obigen Format zu erhalten?
find . -type d -name *log* | xargs sh -c "ls -ltr | tail -10"
gibt mir eine liste von zehn verzeichnisnamen innerhalb des aktuellen verzeichnisses was zufällig ist /var/opt/SID
und das ist auch nicht was ich will.
sh -c
dass der Befehlsname (Parameter 0) als zweites Argument erwartet wird. Dies sollten Sie immer tun find . -type d -name *log* | xargs sh -c "ls -ltr | tail -10" lstail
(beachten Sie das lstail
am Ende, das $0
für die erstellte Shell verwendet wird). Andernfalls wird das erste Ihrer Ergebnisse diese Rolle ausfüllen und nicht verwendet.
*log*
sonst wird die Shell es erweitern.