ŘEŠENÍ 1 (kombinace find a grep )
Účelem tohoto řešení není zabývat se grep výkon, ale ukázat přenosné řešení:mělo by také fungovat s busyboxem nebo verzí GNU starší než 2.5.
Použijte find , pro vyloučení adresářů foo a bar :
find /dir \( -name foo -prune \) -o \( -name bar -prune \) -o -name "*.sh" -print
Poté zkombinujte find a nerekurzivní použití grep , jako přenosné řešení:
find /dir \( -name node_modules -prune \) -o -name "*.sh" -exec grep --color -Hn "your text to find" {} 2>/dev/null \;
ŘEŠENÍ 2 (pomocí --exclude-dir možnost grep ):
Toto řešení již znáte, ale přidávám ho, protože je to nejnovější a nejúčinnější řešení. Všimněte si, že toto je méně přenosné řešení, ale lépe čitelné pro člověka.
grep -R --exclude-dir=node_modules 'some pattern' /path/to/search
Chcete-li vyloučit více adresářů, použijte --exclude-dir jako:
--exclude-dir={node_modules,dir1,dir2,dir3}
ŘEŠENÍ 3 (Ag)
Pokud často prohledáváte kód, Ag (The Silver Searcher) je mnohem rychlejší alternativou ke grep, která je přizpůsobena pro vyhledávání kódu. Například automaticky ignoruje soubory a adresáře uvedené v .gitignore , takže nemusíte do grep stále předávat tytéž těžkopádné možnosti vyloučení nebo find .
Nejnovější verze GNU Grep (>=2.5.2) uveďte:
--exclude-dir=dir
což vylučuje adresáře odpovídající vzoru dir z rekurzivního vyhledávání v adresáři.
Takže můžete:
grep -R --exclude-dir=node_modules 'some pattern' /path/to/search
Další informace týkající se syntaxe a použití viz
- Manuálová stránka GNU pro výběr souborů a adresářů
- Související odpověď StackOverflow Použijte syntaxi grep --exclude/--include, abyste neprocházeli určitými soubory
Pro starší GNU Greps a POSIX Grep , použijte find jak je navrženo v jiných odpovědích.
Nebo stačí použít ack (Upravit :nebo The Silver Searcher ) a hotovo!