GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann ich Verzeichnisse von grep -R ausschließen?

LÖSUNG 1 (kombiniere find und grep )

Der Zweck dieser Lösung besteht nicht darin, sich mit grep zu befassen Leistung, aber um eine portable Lösung zu zeigen:sollte auch mit Busybox oder GNU-Versionen älter als 2.5 funktionieren.

Verwenden Sie find , zum Ausschließen der Verzeichnisse foo und bar :

find /dir \( -name foo -prune \) -o \( -name bar -prune \) -o -name "*.sh" -print

Kombinieren Sie dann find und die nicht-rekursive Verwendung von grep , als portable Lösung :

find /dir \( -name node_modules -prune \) -o -name "*.sh" -exec grep --color -Hn "your text to find" {} 2>/dev/null \;

LÖSUNG 2 (unter Verwendung des --exclude-dir Option von grep ):

Sie kennen diese Lösung bereits, aber ich füge sie hinzu, da es die neueste und effizienteste Lösung ist. Beachten Sie, dass dies eine weniger tragbare Lösung, aber besser lesbar ist.

grep -R --exclude-dir=node_modules 'some pattern' /path/to/search

Um mehrere Verzeichnisse auszuschließen, verwenden Sie --exclude-dir als:

--exclude-dir={node_modules,dir1,dir2,dir3}

LÖSUNG 3 (Ag)

Wenn Sie häufig Code durchsuchen, ist Ag (The Silver Searcher) eine viel schnellere Alternative zu grep, die für die Suche nach Code angepasst ist. Beispielsweise ignoriert es automatisch Dateien und Verzeichnisse, die in .gitignore aufgeführt sind , sodass Sie nicht immer dieselben umständlichen Ausschlussoptionen an grep übergeben müssen oder find .


Aktuelle Versionen von GNU Grep (>=2.5.2) bieten:

--exclude-dir=dir

wodurch Verzeichnisse ausgeschlossen werden, die dem Muster dir entsprechen aus rekursiven Verzeichnissuchen.

Sie können also Folgendes tun:

grep -R --exclude-dir=node_modules 'some pattern' /path/to/search

Weitere Informationen zu Syntax und Verwendung finden Sie unter

  • Die GNU-Manpage für die Datei- und Verzeichnisauswahl
  • Eine verwandte StackOverflow-Antwort Verwenden Sie grep --exclude/--include-Syntax, um bestimmte Dateien nicht zu durchsuchen

Für ältere GNU Greps und POSIX Grep , verwenden Sie find wie in anderen Antworten vorgeschlagen.

Oder verwenden Sie einfach ack (Bearbeiten :oder Der Silbersucher ) und fertig!


Linux
  1. Wie kann man verhindern, dass sed puffert?

  2. Wie kann ich die Ausgabe von grep an cp weiterleiten?

  3. rekursives grep:Bestimmte Verzeichnisse ausschließen

  4. Wie kann ich eindeutige Ergebnisse aus der grep-Ausgabe herausfiltern?

  5. Wie kann ich einen rekursiven chmod nur für Verzeichnisse ausführen?

So schließen Sie in Grep aus

So schließen Sie Dateien und Verzeichnisse mit Rsync aus

So schließen Sie bestimmte Verzeichnisse vom Kopieren in Linux aus

So erstellen Sie Verzeichnisse aus einer Textdatei unter Linux

So schließen Sie den Grep-Befehl unter Linux aus

So schließen Sie Pakete von Apt-Get Upgrade aus