GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo realizar una búsqueda Grep en todos los archivos y en todos los directorios

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

Por lo general, 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 , úsalo así:

grep search_term *

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

Puedes hacer búsqueda grep en todos los archivos y todos los subdirectorios del directorio actual usando -r opción de búsqueda recursiva:

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 apropiados para que sea 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 empty.txt, todos los archivos contienen el término 'simple' en el que realizaré la búsqueda de grep.

[email protected]:~/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 comodines (*). El comodín en realidad sustituye con el nombre de todos los archivos y directorios en el directorio actual.

grep simple *

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

Si no está en el mismo directorio en el que desea actuar, puede especificar la ruta del directorio y terminar 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 sabe, veamos cómo puede 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 un -r opción para la búsqueda recursiva. Con esta opción, grep buscará en todos los archivos del 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 hacer una búsqueda grep en la carpeta actual:

grep -r simple .

Aquí está el resultado:

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

grep -R simple .

Entonces, ¿cuál es la diferencia grep -r y grep -R ? Solo uno, en realidad. El -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 a la salida de -R buscar en el mismo ejemplo:

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

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

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

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

No es eso. 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 aquí:

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

Para resumir

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

Espero que les guste este consejo rápido de grep. Si quiere más, puede leer este tutorial detallado sobre el uso del comando grep:

Hazme saber si tienes alguna pregunta o sugerencia sobre este tema.


Linux
  1. Cómo buscar y eliminar directorios recursivamente en Linux

  2. Línea de comando:busque y reemplace en todos los nombres de archivo que coincidan con grep

  3. Cómo enumerar recursivamente todos los archivos y directorios

  4. ¿Cómo busco directorios y encuentro archivos que coincidan con expresiones regulares?

  5. ¿Cómo encuentro todos los archivos y directorios en los que puede escribir un usuario específico?

Cómo copiar archivos y directorios en Linux

Cómo mover archivos y directorios en Linux (comando mv)

Cómo realizar una búsqueda de patrones en archivos usando Grep

Cómo usar el comando cp para copiar archivos y directorios

Cómo sincronizar archivos y directorios usando Zaloha.sh

Cómo hacer una copia de seguridad de archivos y directorios usando Rsync en Linux

    Comando Grep Descripción
    cadena grep * Busca en todos los archivos del directorio actual
    directorio de cadena grep Busca en todos los archivos del directorio dir
    grep -r cadena . Búsqueda recursiva en todos los archivos en todos los subdirectorios
    grep -r directorio de cadena Búsqueda recursiva en todos los archivos en todos los subdirectorios de dir
    grep -R cadena . Igual que r pero sigue los enlaces simbólicos