Mit find:
cd /the/dir
find . -type f -exec grep pattern {} +
( Dient -type fnur zum Suchen in regulären Dateien (auch ohne Symlinks, selbst wenn sie auf reguläre Dateien verweisen). Wenn Sie in einem beliebigen Dateityp außer Verzeichnissen suchen möchten (aber beachten Sie, dass es einige Dateitypen wie fifos oder / dev / zero gibt) im allgemeinen mögen Sie nicht lesen), ersetzen Sie -type fmit dem GNU-spezifischen ! -xtype d( -xtype dEinstimmungen für Dateien vom Typ Verzeichnis nach Symlink Auflösung)).
Mit GNU grep:
grep -r pattern /the/dir
(Beachten Sie jedoch, dass, sofern Sie keine neuere Version von GNU grep haben, beim Abstieg in Verzeichnisse Symlinks folgen). Nicht reguläre Dateien werden nur durchsucht, wenn Sie eine -D readOption hinzufügen . Neuere Versionen von GNU grepwerden jedoch immer noch nicht in Symlinks suchen.
Sehr alte Versionen von GNU findhaben die Standardsyntax nicht unterstützt {} +, aber dort können Sie die nicht standardmäßige verwenden:
cd /the/dir &&
find . -type f -print0 | xargs -r0 grep pattern
Performances sind wahrscheinlich I / O-gebunden. Dies ist die Zeit, die für die Suche benötigt wird, um alle diese Daten aus dem Speicher zu lesen.
Wenn sich die Daten auf einem redundanten Festplattenarray befinden, kann das gleichzeitige Lesen mehrerer Dateien die Leistung verbessern (und sie ansonsten beeinträchtigen). Wenn die Leistung nicht an E / A gebunden ist (weil sich beispielsweise alle Daten im Cache befinden) und Sie über mehrere CPUs verfügen, kann die gleichzeitige grepsAusführung ebenfalls hilfreich sein. Sie können dies mit xargsder -POption von GNU tun .
Zum Beispiel, wenn sich die Daten auf einem RAID1-Array mit 3 Laufwerken befinden oder wenn sich die Daten im Cache befinden und Sie 3 CPUs haben, deren Zeit übrig bleibt:
cd /the/dir &&
find . -type f -print0 | xargs -n1000 -r0P3 grep pattern
(Hier wird alle 1000 Dateien -n1000eine neue grepDatei erzeugt, bis zu 3 gleichzeitig).
Beachten Sie jedoch, dass Sie, wenn die Ausgabe von grepumgeleitet wird, eine schlecht verschachtelte Ausgabe der drei grepProzesse erhalten. In diesem Fall möchten Sie sie möglicherweise ausführen als:
find . -type f -print0 | stdbuf -oL xargs -n1000 -r0P3 grep pattern
(auf einem aktuellen GNU- oder FreeBSD-System) oder verwenden Sie die --line-bufferedOption von GNU grep.
Wenn patternes sich um eine feste Zeichenfolge handelt, kann das Hinzufügen der -FOption die Situation verbessern.
Wenn es sich nicht um Mehrbytezeichendaten handelt oder wenn für die Übereinstimmung dieses Musters keine Rolle spielt, ob es sich um Mehrbytezeichen handelt oder nicht, dann gilt Folgendes:
cd /the/dir &&
LC_ALL=C grep -r pattern .
könnte die Leistung erheblich verbessern.
Wenn Sie solche Suchanfragen häufig durchführen, möchten Sie Ihre Daten möglicherweise mithilfe einer der vielen Suchmaschinen indizieren.
findmitxargsodergrep -R