¿Cómo paso una lista de archivos a grep?

Pregunta:

Estoy usando find y obteniendo una lista de archivos que quiero grep . ¿Cómo canalizo esa lista a grep ?

Respuesta:

Bueno, el caso genérico que funciona con cualquier comando que escribe en stdout es usar xargs , que le permitirá adjuntar cualquier número de argumentos de línea de comando al final de un comando:

$ find … | xargs grep 'search'

O para incrustar el comando en su línea grep con comillas invertidas o $() , que ejecutará el comando y sustituirá su salida:

$ grep 'search' $(find …)

Tenga en cuenta que estos comandos no funcionan si los nombres de los archivos contienen espacios en blanco u otros “caracteres extraños” ( \'" para xargs, \[*? Para $(find …) ).


Sin embargo, en el caso específico de find la capacidad de ejecutar un programa en los argumentos dados está incorporada:

$ find … -exec grep 'search' {} \;

Todo entre -exec y ; es el comando a ejecutar; {} se reemplaza con el nombre de archivo encontrado por find . Eso ejecutará un grep separado para cada archivo; dado que grep puede tomar muchos nombres de archivo y buscarlos en todos, puede cambiar el ; a + para decirle a find que pase todos los nombres de archivo coincidentes a grep a la vez:

$ find … -exec grep 'search' {} \+

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım