GNU/Linux >> Znalost Linux >  >> Linux

Jak mohu vyloučit adresáře z grep -R?

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


Linux
  1. Jak zastavit sed ukládání do vyrovnávací paměti?

  2. Jak převést výstup z grep do cp?

  3. Jak mohu odstranit jenkins úplně z linuxu

  1. Jak mohu odstranit tiskárnu z CUPS?

  2. Jak mohu vyloučit soubory ve výchozím nastavení pomocí rsync?

  3. Jak mohu zapisovat do dmesg z příkazového řádku?

  1. Jak vyloučit konkrétní adresáře z kopírování v Linuxu

  2. Jak mohu vyloučit adresář z příkazu ls

  3. rekurzivní grep:vyloučení konkrétních adresářů