¿Cómo puedo dirigir una entrada de tubería al comando ls?

18

Cuando escribo algo como:

find . -name *foo* | ls -lah

devuelve el mismo resultado que un comando simple ls , como si no tuviera ninguna entrada.

Sin embargo:

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

funciona bien, pero solo cuando el comando find tiene resultados.

¿Es posible canalizar a ls ?

    
pregunta Lasall 21.05.2011 - 06:30

4 respuestas

21

Puedes usar -exec con find command.

find . -name '*foo*' -exec ls -lah {} \;
    
respondido por el Prince John Wesley 21.05.2011 - 07:01
17
find . -name *foo* | xargs -r ls -lah

Eso debería funcionar.

    
respondido por el freethinker 21.05.2011 - 06:36
2

Pruebe esto:

find  . -name *.bak -ls
    
respondido por el Dennis 11.06.2015 - 20:29
0

Use esto: (Puedo ordenar, funciona con nombres de archivos con espacios o caracteres inusuales)

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

"- print0" significa que los nombres de archivo como file foo 1 obtendrán un resultado de find seguido de nulo. El argumento "-0" para xargs le dice que espere este tipo de entrada, por lo que los nombres de archivo con espacios se canalizan al comando ls correctamente.

La construcción de xargs es mejor que find etc -exec ls {} \; porque todos los nombres de archivos se envían a ls a la vez, por lo que si quieres ordenarlos por timestamp (usando ls ), algo como esto funciona:

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

En un sistema NetBSD, "-printx" también es una opción (esto parece un argumento útil para mí, pero como sea, tenemos xargs -0 y está bien):

find . -name *foo* -printx | xargs ls -lah (no para Ubuntu)

    
respondido por el Peter Kay 07.09.2018 - 11:29

Lea otras preguntas en las etiquetas