HP-UX ***** B.11.23 U ia64 **** licencia de usuario ilimitada
find . -type d -name *log* | xargs ls -la
me da los nombres de directorio (los que contienen logen el nombre del directorio) seguidos de todos los archivos dentro de ese directorio.
Los directorios /var/opt/SID/application_a/log/, /var/opt/SID/application_b/log/, /var/opt/SID/application_c/log/y así sucesivamente contienen archivos de registro.
Solo quiero que el comando enumere los dos últimos archivos de registro ls, que generalmente encuentro usando ls -latr | tail -2.
La salida tiene que ser algo como esto ...
/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 -2No me da el resultado anterior. Lo que obtengo es una lista de los últimos dos archivos de
find . -type d -name *log* | xargs ls -lacomando.
Entonces, ¿puedo canalizar comandos después de un canalizado xargs? ¿De qué otra manera puedo consultar para obtener la lista de archivos resultante en el formato anterior?
find . -type d -name *log* | xargs sh -c "ls -ltr | tail -10"
me da una lista de diez nombres de directorio dentro del directorio actual que resulta ser /var/opt/SIDy que tampoco es lo que quiero.
sh -cespera el nombre del comando (parámetro 0) como su segundo argumento, por lo que siempre debe hacerlo find . -type d -name *log* | xargs sh -c "ls -ltr | tail -10" lstail(observe lstailal final, que servirá como $0para el shell creado). De lo contrario, el primero de sus resultados ocupará ese rol y no se utilizará.
*log*contrario, el shell lo expandirá.