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 log
en 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 -2
No me da el resultado anterior. Lo que obtengo es una lista de los últimos dos archivos de
find . -type d -name *log* | xargs ls -la
comando.
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/SID
y que tampoco es lo que quiero.
sh -c
espera 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 lstail
al final, que servirá como $0
para el shell creado). De lo contrario, el primero de sus resultados ocupará ese rol y no se utilizará.
*log*
contrario, el shell lo expandirá.