Cómo usar grep de forma recursiva dentro de ciertas extensiones de archivo

grep es una gran herramienta para buscar a través de archivos y entrada estándar en Linux y es capaz de hacer coincidir patrones de cadenas y Regex. Sin embargo, a veces es necesario controlar qué tipo de archivos grep busca, y tiene banderas incorporadas para hacer precisamente eso.

Índice de contenidos
  1. Incluir solo ciertos archivos en búsquedas grep
  2. Usar buscar en su lugar

Incluir solo ciertos archivos en búsquedas grep

Por defecto, grep buscará todos los archivos en una carpeta dada y sus subcarpetas si lo invoca con el recursivo -r bandera. Esto recogerá todo, pero si solo desea ciertas extensiones, la opción que querrá usar es --include.

los --include bandera dice grep a solo incluye archivos que coincidan con un cierto patrón. Si se especifica, grep tratará todas las banderas de inclusión como una lista blanca. Puede usar esto con cualquier carácter global de Linux, como comodines para hacer coincidir todo, incluida una determinada extensión:

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

Tenga en cuenta que esto se escapa con una barra diagonal porque es posible que los nombres de archivos tengan asteriscos. También puede especificar varios --include banderas, por ejemplo, buscando todos los archivos fuente HTML, JS y CSS en un wwwroot:

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

De manera similar, también puede excluir ciertos nombres de archivos, que seguirán coincidiendo con todo excepto con el glob, 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 buscar en su lugar

Alternativamente, si prefiere usar el find utilidad para buscar a través de archivos, puede conectarlo a grep utilizando tuberías y xargs. find puede realizar búsquedas con patrones y Regex, y tiene una serie de ventajas, incluida la posibilidad 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 obtuso, ya que necesitará usar -print0 al final de find para imprimir una lista de una sola línea y luego pasarla a xargs -0 y grep desde allí.

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

Descubre más contenido

Subir Change privacy settings