HP-UX ***** B.11.23 U Licence utilisateur illimité **** ia64 ****
find . -type d -name *log* | xargs ls -la
me donne les noms de répertoires (ceux qui contiennent log
le nom du répertoire) suivis de tous les fichiers de ce répertoire.
Les répertoires /var/opt/SID/application_a/log/
, /var/opt/SID/application_b/log/
, /var/opt/SID/application_c/log/
etc. contiennent des fichiers journaux.
Je veux que seuls les deux derniers fichiers de log soient listés par la ls
commande, ce que je trouve habituellement avec ls -latr | tail -2
.
La sortie doit être quelque chose comme ça ..
/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
ne me donne pas le résultat ci-dessus. Ce que je reçois est une liste des deux derniers fichiers de
find . -type d -name *log* | xargs ls -la
commande.
Alors, puis-je diriger les commandes après une passe xargs
? Sinon, comment interroger, pour obtenir la liste résultante des fichiers dans le format ci-dessus?
find . -type d -name *log* | xargs sh -c "ls -ltr | tail -10"
me donne une liste de dix noms de répertoire dans le répertoire actuel, ce /var/opt/SID
qui n’est pas ce que je veux.
sh -c
le nom de la commande (paramètre 0) est attendu comme second argument. Vous devez donc toujours le faire find . -type d -name *log* | xargs sh -c "ls -ltr | tail -10" lstail
(remarquez-le lstail
à la fin, qui servira comme $0
pour le shell créé). Sinon, le premier de vos résultats remplira ce rôle et restera inutilisé.
*log*
cas contraire, le shell le développera.