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 logim 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 lsBefehl 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 -2gibt mir das obige ergebnis nicht. Was ich bekomme, ist eine Liste der letzten beiden
find . -type d -name *log* | xargs ls -laBefehlsdateien.
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/SIDund das ist auch nicht was ich will.
sh -cdass 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 lstailam Ende, das $0fü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.