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 --include
especifica grep
incluir 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 xargs
. find
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