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.
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. Puedes usar esto con cualquier Personajes globales de Linuxcomo 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"