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!