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 lognel 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 lscomando, 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 -2non mi dà il risultato sopra. Quello che ottengo è un elenco degli ultimi due file di
find . -type d -name *log* | xargs ls -lacomando.
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/SIDe che non è anche quello che voglio.
sh -caspetta 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 lstailalla fine, che servirà come $0per la shell creata). Altrimenti il primo dei tuoi risultati ricoprirà quel ruolo e rimarrà inutilizzato.
*log*altrimenti la shell lo espanderà.