SOLUTION 1 (combiner find
et grep
)
Le but de cette solution n'est pas de traiter les grep
performances 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 find
et 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-dir
comme:
--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 à grep
ou find
.