SOLUTION 1 (combiner findet grep)
Le but de cette solution n'est pas de traiter les grepperformances mais de montrer une solution portable: devrait également fonctionner avec busybox ou une version 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 findet l'utilisation non récursive de grep, comme solution portable:
find /dir \( -name node_modules -prune \) -o -name "*.sh" -exec grep --color -Hn "your text to find" {} 2>/dev/null \;
SOLUTION 2 (utilisation récursive 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-dircomme:
--exclude-dir={node_modules,dir1,dir2,dir3}
SOLUTION 3 (Ag)
Si vous recherchez fréquemment du code, Ag (The Silver Searcher) est une alternative beaucoup plus rapide à grep, qui est 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 à passer les mêmes options d'exclusion lourdes à grepou find.