GNU/Linux >> Tutoriels Linux >  >> Linux

Comment puis-je exclure des répertoires de grep -R ?

SOLUTION 1 (combinez find et grep )

Le but de cette solution n'est pas de traiter grep performance mais pour montrer une solution portable :devrait également fonctionner avec la version busybox ou GNU antérieure à 2.5.

Utilisez find , pour exclure les répertoires foo et bar :

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

Combinez ensuite find et l'utilisation non récursive de grep , en solution portable :

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

SOLUTION 2 (en utilisant le --exclude-dir possibilité de grep ):

Vous connaissez déjà cette solution, mais je l'ajoute car c'est la solution la plus récente et la plus efficace. Notez qu'il s'agit d'une solution moins portable mais plus lisible par l'homme.

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

Pour exclure plusieurs répertoires, utilisez --exclude-dir comme :

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

SOLUTION 3 (Ag)

Si vous effectuez fréquemment des recherches dans le code, Ag (The Silver Searcher) est une alternative beaucoup plus rapide à grep, personnalisée pour la recherche de code. Par exemple, il ignore automatiquement les fichiers et répertoires répertoriés dans .gitignore , vous n'avez donc pas à transmettre les mêmes options d'exclusion fastidieuses à grep ou find .


Versions récentes de GNU Grep (>=2.5.2) fournir :

--exclude-dir=dir

qui exclut les répertoires correspondant au modèle dir à partir de recherches récursives dans les répertoires.

Vous pouvez donc :

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

Pour un peu plus d'informations sur la syntaxe et l'utilisation, voir

  • La page de manuel GNU pour la sélection de fichiers et de répertoires
  • Une réponse StackOverflow connexe Utilisez la syntaxe grep --exclude/--include pour ne pas parcourir certains fichiers

Pour les anciens GNU Greps et POSIX Grep , utilisez find comme suggéré dans d'autres réponses.

Ou utilisez simplement ack (Modifier :ou Le chercheur d'argent ) et finissons-en !


Linux
  1. Comment empêcher sed de mettre en mémoire tampon ?

  2. Comment diriger la sortie de grep vers cp?

  3. Comment puis-je supprimer complètement Jenkins de Linux

  4. grep récursif :exclure des répertoires spécifiques

  5. Comment puis-je filtrer les résultats uniques de la sortie grep ?

Comment exclure dans Grep

Comment exclure des fichiers et des répertoires avec Rsync

Comment exclure des répertoires spécifiques de la copie sous Linux

Comment créer des répertoires à partir d'un fichier texte sous Linux

Comment exclure dans la commande Grep sous Linux

Comment exclure des packages de la mise à niveau Apt-Get