HP-UX ***** B.11.23 U ia64 **** licenza per utente illimitato
find . -type d -name *log* | xargs ls -la
mi dà i nomi delle directory (quelli che contengono log
nel nome della directory) seguiti da tutti i file all'interno di quella directory.
Le directory /var/opt/SID/application_a/log/
, /var/opt/SID/application_b/log/
, /var/opt/SID/application_c/log/
e così via contengono file di log.
Voglio solo gli ultimi due file di registro che siano elencati dal ls
comando, che di solito trovo usando ls -latr | tail -2
.
L'output deve essere qualcosa del genere ..
/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
non mi dà il risultato sopra. Quello che ottengo è un elenco degli ultimi due file di
find . -type d -name *log* | xargs ls -la
comando.
Quindi posso eseguire il pipe dei comandi dopo un pipe xargs
? In quale altro modo posso eseguire una query per ottenere l'elenco risultante dei file nel formato sopra?
find . -type d -name *log* | xargs sh -c "ls -ltr | tail -10"
mi dà un elenco di dieci nomi di directory all'interno della directory corrente che sembra essere /var/opt/SID
e che non è anche quello che voglio.
sh -c
aspetta il nome del comando (parametro 0) come secondo argomento, quindi dovresti sempre farlo find . -type d -name *log* | xargs sh -c "ls -ltr | tail -10" lstail
(nota lstail
alla fine, che servirà come $0
per la shell creata). Altrimenti il primo dei tuoi risultati ricoprirà quel ruolo e rimarrà inutilizzato.
*log*
altrimenti la shell lo espanderà.