HP-UX ***** B.11.23 U ia64 **** licença de usuário ilimitado
find . -type d -name *log* | xargs ls -la
fornece os nomes dos diretórios (aqueles que contêm log
no nome do diretório) seguidos por todos os arquivos dentro desse diretório.
Os diretórios /var/opt/SID/application_a/log/
, /var/opt/SID/application_b/log/
, /var/opt/SID/application_c/log/
e assim por diante contêm arquivos de log.
Eu quero que apenas os dois últimos arquivos de log sejam listados pelo ls
comando, que eu costumo encontrar usando ls -latr | tail -2
.
A saída tem que ser algo como isto ..
/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
não me dá o resultado acima. O que recebo é uma lista dos dois últimos arquivos de
find . -type d -name *log* | xargs ls -la
comando.
Então, posso canalizar comandos após um canal xargs
? De que outra forma eu consulta, para obter a lista resultante de arquivos no formato acima?
find . -type d -name *log* | xargs sh -c "ls -ltr | tail -10"
dá-me uma lista de dez nomes de diretório dentro do diretório atual, o que acontece /var/opt/SID
e também não é o que eu quero.
sh -c
espera o nome do comando (parâmetro 0) como seu segundo argumento, então você deve sempre fazê-lo find . -type d -name *log* | xargs sh -c "ls -ltr | tail -10" lstail
(observe o lstail
no final, que servirá como $0
para o shell criado). Caso contrário, o primeiro dos seus resultados preencherá essa função e não será utilizado.
*log*
caso contrário, o shell o expandirá.