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 !