Cómo usar grep recursivamente en extensiones de archivo específicas

Cómo usar grep recursivamente en extensiones de archivo específicas

grep es una excelente herramienta de búsqueda de archivos y entrada estándar de Linux que puede hacer coincidir cadenas y patrones de expresiones regulares. Sin embargo, a veces es necesario controlar qué archivos grep buscar, y para ello tiene banderas integradas.

Incluir solo archivos específicos en la búsqueda grep

De forma predeterminada grep , buscará todos los archivos en la carpeta dada y sus subcarpetas si lo llama con el -r indicador recursivo. Esto recogerá todo, pero si solo desea ciertas extensiones, la opción que querrá usar es--include.

El indicador --includeespecifica grepincluir solo archivos que coincidan con un determinado patrón. Si se especifica, grep todas las banderas habilitadas se tratarán como una lista blanca. Puede usar esto con cualquier carácter global de Linux , como comodines, para que coincida con todo, incluida una extensión específica:

grep -inr --include \*.txt "foo"~/folder

Tenga en cuenta que esto se escapa con una barra inclinada \ , porque puede haber asteriscos en los nombres de archivo. También puede especificar varios --include indicadores, por ejemplo, para buscar todos los archivos fuente HTML, JS y CSS en wwwroot:

grep -inr --include \*.html --include \*.css --include \*.js "foo"~/folder

De manera similar, también puede excluir ciertos nombres de archivo que aún coincidirán con cualquier cosa menos global, actuando como una lista negra sobre la configuración existente:

grep -inr --exclude \*.txt "foo"~/folder

También hay una bandera para excluir directorios completos a la vez:

grep -inr --exclude-dir config "foo"~/folder

Usar la búsqueda en su lugar

Alternativamente, si prefiere usar find una utilidad de búsqueda de archivos, puede conectarla a grep canales y archivos xargsfind puede buscar utilizando patrones y expresiones regulares y tiene una serie de ventajas, incluida la capacidad de filtrar archivos fácilmente en función de metadatos como el tamaño, la fecha de creación y modificación y otros identificadores de Linux.

El comando es un poco tonto, ya que deberá usarlo -print0 al final find para imprimir la lista de una línea y luego pasarla de un lado a xargs -0 otro grep .

 find. / -type f -iname "*.txt"-print0 | xargs -0 grep "foo"

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *