Búsqueda de sitios web

Realice una búsqueda recursiva Grep en todos los archivos y directorios


El versátil comando grep le permite buscar un texto en todos los archivos y todos los subdirectorios de un directorio. Aquí se explica cómo hacerlo.

Grep es una excelente herramienta cuando tienes que buscar el contenido de un archivo.

Generalmente, ejecuta grep en un solo archivo como este:

grep search_term filename

Grep es bastante versátil. Si desea buscar todos los archivos en un directorio con grep, utilícelo así:

grep search_term *

Hay un problema con eso. Solo busca en todos los archivos del directorio actual. No buscará en los subdirectorios.

Puede realizar búsqueda grep en todos los archivos y todos los subdirectorios del directorio actual utilizando la opción de búsqueda recursiva -r:

grep -r search_term . 

También puede especificar la ruta del directorio si no se encuentra en el directorio donde desea realizar la búsqueda:

grep -r search_term directory_path

Ese fue un resumen rápido. Déjame mostrarte todo esto en detalle con ejemplos adecuados para que te resulte más fácil de entender.

Búsqueda grep en todos los archivos de un directorio

Aquí está la estructura de directorios que voy a usar en este ejemplo. Excepto el archivo vacío.txt, todos los archivos contienen el término "simple" en el que realizaré la búsqueda grep.

abhishek@LHB:~/scripts$ tree
.
├── dir1
│   └── new_script.sh
├── dir2
│   └── your_script.sh
├── dir3
│   ├── empty.txt
│   └── linked.txt -> ../../sample.txt
├── my_script.sh
└── your_script.sh

3 directories, 6 files

Para buscar la palabra 'simple' en todos los archivos de los directorios actuales, basta con utilizar el comodín (*). El comodín en realidad lo sustituye por el nombre de todos los archivos y directorios del directorio actual.

grep simple *

Esto buscará en todos los archivos en los directorios actuales, pero no ingresará a los subdirectorios. Dado que no puede realizar una búsqueda grep directamente en un directorio, se mostrará el error "XYZ es un directorio" junto con los resultados de la búsqueda.

Si no está en el mismo directorio donde desea realizar, puede especificar la ruta del directorio y finalizar con /*

grep search_term directory_path/*

Básicamente, está utilizando el comodín para expandir todos los elementos (archivos y directorios) del directorio dado.

Ahora que lo sabes, veamos cómo puedes realizar una búsqueda recursiva con grep para que también busque en los archivos de los subdirectorios.

Búsqueda recursiva grep en todos los subdirectorios de un directorio

Grep proporciona una opción -r para la búsqueda recursiva. Con esta opción, grep buscará en todos los archivos en el directorio actual (o especificado) y también buscará en todos los archivos de todos los subdirectorios.

Aquí está la búsqueda recursiva que realicé en el ejemplo anterior para realizar una búsqueda grep en la carpeta actual:

grep -r simple .

Aquí está el resultado:

También hay una opción -R para búsqueda recursiva y funciona casi igual que la opción -r.

grep -R simple .

Entonces, ¿cuál es la diferencia grep -r y grep -R? En realidad, sólo uno. -R es una búsqueda sin referencia, lo que significa que seguirá los enlaces simbólicos para ir al archivo original (que puede estar ubicado en alguna otra parte del sistema).

Eche un vistazo al resultado de la búsqueda -R en el mismo ejemplo:

¿Notaste que proporciona un resultado de búsqueda adicional con linked.txt, que es básicamente un enlace simbólico y se omitió de la búsqueda grep con la opción -r?

Si no está en el directorio donde desea realizar la búsqueda recursiva, simplemente proporcione la ruta absoluta o relativa del directorio al comando grep:

grep -r search_term path_to_directory

Consejo adicional: excluya un directorio determinado de la búsqueda grep recursiva

Todo parece estar bien, pero ¿qué pasa si desea excluir un determinado directorio de la búsqueda recursiva? También existe una disposición para eso. Te lo dije, grep es un comando extremadamente versátil.

grep -r --exclude-dir=dir_name serach_term directory_path

Eso no es todo. Puede excluir más de un subdirectorio de la búsqueda recursiva de la siguiente manera:

grep -r --exclude-dir={dir1,dir2} serach_term directory_path

Así es como se ven los directorios excluidos en nuestro ejemplo:

Y sí, como lo demuestra el ejemplo anterior, la exclusión funciona con las opciones recursivas -r y -R.

Para resumir

Aquí hay un resumen rápido del uso de la búsqueda grep para múltiples archivos y directorios:

grep string *

Busca en todos los archivos en el directorio actual.

grep string dir

Busca en todos los archivos en el directorio dir.

grep -r string .

Búsqueda recursiva en todos los archivos en todos los subdirectorios.

grep -r string dir

Búsqueda recursiva en todos los archivos en todos los subdirectorios del directorio.

grep -R string .

Igual que r pero sigue los enlaces simbólicos.

Espero que te guste este consejo rápido de grep. Si quieres más, puedes leer este tutorial detallado sobre cómo usar el comando grep:

Déjame saber si tienes alguna pregunta o sugerencia sobre este tema.