Wie man grep rekursiv für bestimmte Dateierweiterungen verwendet

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 --includegibt grepan, 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 xargsfind 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

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert