29 votes

Comment puis-je diriger une entrée de tuyau vers la commande ls?

Quand je tape quelque chose comme:

find . -name *foo* | ls -lah

il renvoie le même résultat qu'une commande ls simple, comme s'il n'avait pas d'entrée.

Cependant:

ls -lah $( find . -name *foo* )

fonctionne bien, mais seulement lorsque la commande find a des résultats.

Est-il possible de rediriger vers ls ?

36voto

Jeffrey Points 2616

Vous pouvez utiliser -exec avec la commande find.

find . -name '*foo*' -exec ls -lah {} \;

24voto

trotterdylan Points 279
trouver . -name *foo* | xargs -r ls -lah

Cela devrait fonctionner.

8voto

Dennis Points 91

Essayez ceci :

trouver . -name *.bak -ls

8voto

Peter Kay Points 81

Cela fonctionne avec des noms de fichiers contenant des espaces ou des caractères inhabituels, et ls peut trier tous les fichiers :

find . -name *foo* -print0 | xargs -0 ls -lah

-print0 signifie que des noms de fichiers tels que file foo 1 seront renvoyés par find suivi de null. L'argument "-0" pour xargs lui indique d'attendre ce type d'entrée, de sorte que les noms de fichiers contenant des espaces sont correctement envoyés à la commande ls.

La construction avec xargs est à certains égards meilleure que find etc -exec ls {} + parce que tous les noms de fichiers sont envoyés à ls en une seule fois, donc si vous voulez les trier tous par horodatage (en utilisant ls), quelque chose comme cela fonctionne :

find . -iname *pdf -print0 | xargs -0 ls -ltr

Sur un système NetBSD, "-printx" est également une option (cela me semble être un argument utile, mais peu importe, nous avons xargs -0 et c'est correct) :

find . -name *foo* -printx | xargs ls -lah` # pas pour Ubuntu

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X