Cuando escribo algo como:
find . -name *foo* | ls -lah
devuelve el mismo resultado que un ls
comando simple , como si no tuviera entrada.
Sin embargo:
ls -lah $( find . -name *foo* )
funciona bien, pero solo cuando el find
comando tiene resultados.
¿Es posible canalizar ls
?
bash
command-line
ls
pipe
Lasall
fuente
fuente
Respuestas:
Se puede usar
-exec
confind
comando.fuente
find . -name '*foo*' -exec ls -lah {} +
Eso debería funcionar.
fuente
-exec +
(o-exec \;
).xargs
solo es seguro de usar con la-0
opción, lo que significa que tiene que decirle a cualquier comando que canalicexargs
para delimitar los elementos con NULL-bytes (\ 0). Confind
usted puede hacer eso con-print0
. xargs's -0 y find's -print0 no son estándar, pero -exec sí lo es, por lo que si la portabilidad es un problema, use find con -exec.Prueba esto:
fuente
Use esto: (ls puede 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
se obtendrán defind
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 canalizanls
correctamente al comando.La
xargs
construcción es en algunos aspectos mejor quefind etc -exec ls {} \;
porque todos los nombres de archivo se envían a lals
vez, por lo que si desea ordenarlos por marca de tiempo (usandols
), algo como esto funciona:find . -iname *pdf -print0 | xargs -0 ls -ltr
En un sistema NetBSD, "-printx" también es una opción (esto me parece un argumento útil, pero lo que sea, tenemos xargs -0 y está bien):
find . -name *foo* -printx | xargs ls -lah
(no para Ubuntu)fuente