xargs
espera entrada en un formato que no produce ningún otro comando, por lo que es difícil de usar de manera efectiva. Lo que está mal aquí es que tiene un archivo cuyo nombre se debe citar en la entrada de xargs
(probablemente contenga un '
).
Si su grep es compatible con -r
o -R
opción para la búsqueda recursiva, utilícela.
grep -r word .
De lo contrario, utilice el -exec
principal de find
. Esta es la forma habitual de lograr el mismo efecto que xargs
, excepto sin restricciones en los nombres de archivo. Versiones razonablemente recientes de find
permite agrupar varios archivos en una sola llamada al comando auxiliar. Pasando /dev/null
a grep
asegura que mostrará el nombre del archivo delante de cada coincidencia, incluso si se llama en un solo archivo.
find . -type f -exec grep word /dev/null {} +
Versiones anteriores de find
(en sistemas más antiguos u OpenBSD, o utilidades reducidas como BusyBox) solo puede llamar al comando auxiliar en un archivo a la vez.
find . -type f -exec grep word /dev/null {} \;
Algunas versiones de find
y xargs
tienen extensiones que les permiten comunicarse correctamente, usando caracteres nulos para separar los nombres de los archivos para que no se requieran comillas. En estos días, solo OpenBSD tiene esta característica sin tener -exec … {} +
.
find . -type f -print0 | xargs -0 grep word /dev/null
Supongo que te refieres a la primera opción
grep recursivo, para buscar contenido dentro de archivos
grep -R "content_to_search" /path/to/directory
ls recursivo, para buscar archivos que coincidan
ls -lR | grep "your_search"
Si tiene las herramientas GNU (lo que hace si la etiqueta de Linux es precisa), puede usar -print0
y -0
para sortear los problemas habituales de cotización:
find . -type f -print0 | xargs -0 grep word