GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo puedo excluir directorios de grep -R?

SOLUCIÓN 1 (combinar find y grep )

El propósito de esta solución no es tratar con grep rendimiento pero para mostrar una solución portátil:también debería funcionar con busybox o una versión de GNU anterior a la 2.5.

Usa find , para excluir directorios foo y bar :

find /dir \( -name foo -prune \) -o \( -name bar -prune \) -o -name "*.sh" -print

Luego combine find y el uso no recursivo de grep , como solución portátil :

find /dir \( -name node_modules -prune \) -o -name "*.sh" -exec grep --color -Hn "your text to find" {} 2>/dev/null \;

SOLUCIÓN 2 (usando el --exclude-dir opción de grep ):

Ya conoce esta solución, pero la agrego porque es la solución más reciente y eficiente. Tenga en cuenta que esta es una solución menos portátil pero más legible por humanos.

grep -R --exclude-dir=node_modules 'some pattern' /path/to/search

Para excluir varios directorios, use --exclude-dir como:

--exclude-dir={node_modules,dir1,dir2,dir3}

SOLUCIÓN 3 (Ag)

Si busca con frecuencia a través del código, Ag (The Silver Searcher) es una alternativa mucho más rápida a grep, que está personalizada para buscar código. Por ejemplo, ignora automáticamente los archivos y directorios enumerados en .gitignore , por lo que no tiene que seguir pasando las mismas opciones de exclusión engorrosas a grep o find .


Versiones recientes de GNU Grep (>=2.5.2) proporcionar:

--exclude-dir=dir

que excluye directorios que coincidan con el patrón dir de búsquedas recursivas en directorios.

Entonces puedes hacer:

grep -R --exclude-dir=node_modules 'some pattern' /path/to/search

Para obtener un poco más de información sobre la sintaxis y el uso, consulte

  • La página del manual de GNU para la selección de archivos y directorios
  • Una respuesta de StackOverflow relacionada Usa la sintaxis grep --exclude/--include para no grep a través de ciertos archivos

Para GNU Greps más antiguos y POSIX Grep , usa find como se sugiere en otras respuestas.

O simplemente use ack (Editar :o El buscador de plata ) ¡y listo!


Linux
  1. Cómo excluir directorios específicos de la copia en Linux

  2. ¿Cómo puedo excluir un directorio del comando ls?

  3. grep recursivo:excluir directorios específicos

  4. ¿Cómo puedo filtrar resultados únicos de la salida grep?

  5. ¿Cómo puedo hacer un chmod recursivo solo en directorios?

Cómo excluir en Grep

Cómo excluir archivos y directorios con Rsync

Cómo crear directorios desde un archivo de texto en Linux

Cómo excluir en el comando Grep en Linux

Cómo excluir paquetes de Apt-Get Upgrade

¿Cómo puedo borrar rápidamente los datos de la partición GPT de un disco?