Quand je tape quelque chose comme:
find . -name *foo* | ls -lah
il renvoie le même résultat qu'une commande plain ls
, comme si elle n'avait aucune entrée.
Toutefois:
ls -lah $( find . -name *foo* )
fonctionne bien, mais uniquement lorsque la commande find
a des résultats.
Est-il possible de canaliser vers ls
?
Vous pouvez utiliser -exec
avec la commande find
.
find . -name '*foo*' -exec ls -lah {} \;
find . -name *foo* | xargs -r ls -lah
Cela devrait fonctionner.
Utilisez ceci: (ls peut trier, travaille avec des noms de fichiers avec des espaces ou des caractères inhabituels)
find . -name *foo* -print0 | xargs -0 ls -lah
"-print0" signifie que les noms de fichiers tels que file foo 1
obtiendront une sortie de find
suivie de null. L'argument "-0" de xargs lui indique d'attendre ce type d'entrée. Par conséquent, les noms de fichiers contenant des espaces sont correctement acheminés vers la commande ls
.
La construction xargs
est, à certains égards, meilleure que find etc -exec ls {} \;
car tous les noms de fichiers sont envoyés à ls
en une fois. Par conséquent, si vous voulez tous les trier par horodatage (en utilisant ls
), voici ce qui fonctionne:
find . -iname *pdf -print0 | xargs -0 ls -ltr
Sur un système NetBSD, "-printx" est également une option (cela me semble un argument utile, mais peu importe, nous avons xargs -0 et c'est correct):
find . -name *foo* -printx | xargs ls -lah
(pas pour Ubuntu)
Essaye ça:
find . -name *.bak -ls