Wie man grep rekursiv für bestimmte Dateierweiterungen verwendet
grep
ist ein großartiges Linux-Dateisuch- und Standardeingabetool, das Zeichenfolgen und reguläre Ausdrucksmuster abgleichen kann. Manchmal ist es jedoch notwendig, zu steuern, nach welchen Dateien grep
gesucht werden soll, und dafür hat es eingebaute Flags.
Nur bestimmte Dateien in die grep-Suche einbeziehen
Standardmäßig grep
sucht es nach allen Dateien im angegebenen Ordner und seinen Unterordnern, wenn Sie ihn mit dem rekursiven -r
Flag aufrufen. Dadurch wird alles aufgenommen, aber wenn Sie nur bestimmte Erweiterungen möchten, sollten Sie die Option verwenden--include.
Das Flag --include
gibt grep
an, dass nur Dateien eingeschlossen werden, die einem bestimmten Muster entsprechen. Wenn es angegeben ist, werden grep
alle aktivierten Flags als Whitelist behandelt. Sie können dies mit allen Linux-Glob-Zeichen wie Platzhaltern verwenden, um alles abzugleichen, einschließlich einer bestimmten Erweiterung:
grep -inr --include \*.txt "foo"~/folder
Beachten Sie, dass dies mit einem Schrägstrich maskiert \
wird, da Dateinamen Sternchen enthalten können. Sie können auch mehrere Flags angeben --include
, um beispielsweise nach allen HTML-, JS- und CSS-Quelldateien in wwwroot zu suchen:
grep -inr --include \*.html --include \*.css --include \*.js "foo"~/folder
In ähnlicher Weise können Sie auch bestimmte Dateinamen ausschließen, die immer noch mit allem außer Glob übereinstimmen und als schwarze Liste über der vorhandenen Konfiguration fungieren:
grep -inr --exclude \*.txt "foo"~/folder
Es gibt auch ein Flag, um ganze Verzeichnisse auf einmal auszuschließen:
grep -inr --exclude-dir config "foo"~/folder
Verwenden Sie stattdessen die Suche
Wenn Sie stattdessen lieber find
ein Dateisuchprogramm verwenden möchten, können Sie es mit grep
Kanälen und Dateien verbinden xargs
. find
kann anhand von Mustern und regulären Ausdrücken suchen und bietet eine Reihe von Vorteilen, darunter die Möglichkeit, Dateien einfach anhand von Metadaten wie Größe, Erstellungs- und Änderungsdatum und anderen Linux-Kennungen zu filtern.
Der Befehl ist etwas dumm, da Sie -print0
am Ende verwenden müssen find
, um die einzeilige Liste zu drucken und sie dann hin xargs -0
und her zu übergeben grep
.
find. / -type f -iname "*.txt"-print0 | xargs -0 grep "foo"
Schreibe einen Kommentar