Ř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!