Dateien nach Inhalt wiederfinden mit grep
Um Dateien nach Inhalt zu suchen gibt es 'grep' oder 'egrep'
Sucht von hier in allen Dateien (*) rekursiv durch alle Directories (-r), in denen ein case-insensitive blah enthalten ist. Leider wird auch in Binärdateien gesucht und falls gefunden diese auch ausgegeben. Das legt zum Teil die Shell lahm, da diese falls das gefundene irgendwie als ANSI-Steuersequenz interpretiert werden kann, es auch so interpretiert.
Im schlimmsten Fall kann man also nichts mehr lesen. Sollte das passiert sein, läßt sich die Shell meist durch eine blinde Eingabe von 'reset' wieder benutzbar machen.
Dateien nach Inhalt finden mit find und xargs
find . -name '*.ext' -exec grep 'search' {} \;
Findet Dateien mit 'search' nur leider wird man im unklaren darüber gelassen, in welcher Datei es auftrat.
So funktioniert es richtig:
find . -name '*.ext' -print0 | xargs -0 grep "search"
Zu lesen ist die Zeile wie folgt: Suche von hier ('.') nach Dateinamen die '*.ext' enthalten und suche in diesen Dateien ob sie 'search' enthalten.
Zuerst wird mittels find nach entsprechenden Dateien gesucht, dann wird das Ergebnis über -print0 | xargs -0 grep an grep übergeben. Diese schreibweise hat den Vorteil, das im Ergebnis mit drin steht, in welcher Datei das gesuchte gefunden wurde.
Falls uns nur die Dateien interessieren, aber nicht was da drin ist. Hänge man an 'grep' einfach ein klein L an.
find . -name '*.ext' -print0 | xargs -0 grep -l "search"
Verwandte Themen