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 logno 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 lscomando, 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 -2não me dá o resultado acima. O que recebo é uma lista dos dois últimos arquivos de
find . -type d -name *log* | xargs ls -lacomando.
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/SIDe também não é o que eu quero.
sh -cespera 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 lstailno final, que servirá como $0para 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á.