linux - suchen - ubuntu datei finden




Was ist der beste Weg, eine Zeichenfolge/Regex-Übereinstimmung rekursiv in Dateien zu finden?(UNIX) (6)

Die portable Methode * dies zu tun ist

find . -type f -print0 | xargs -0 grep pattern

-print0 teilt Find mit, dass ASCII nuls als Trennzeichen und -0 xargs dasselbe gilt. Wenn Sie sie nicht verwenden, erhalten Sie Fehler bei Dateien und Verzeichnissen, die Leerzeichen in ihren Namen enthalten.

* im Gegensatz zu grep -r, grep -R oder grep --recursive, die nur auf einigen Rechnern funktionieren.

Ich musste dies mehrmals tun, normalerweise wenn ich versuchte herauszufinden, in welchen Dateien eine Variable oder eine Funktion verwendet wird.

Ich erinnere mich daran, in der Vergangenheit mit grep xargs benutzt zu haben, aber ich frage mich, ob es leichtere Wege gibt.


Dies ist eine großartige Möglichkeit, um den exakten Ausdruck rekursiv mit einem oder mehreren Dateitypen zu finden:

find . \\( -name '\''*.java'\'' -o -name '\''*.xml'\'' \\) | xargs egrep find . \\( -name '\''*.java'\'' -o -name '\''*.xml'\'' \\) | xargs egrep (interne einfache Anführungszeichen)

Woher

-name '\''*.<filetype>'\'' -o (wieder einfache Anführungszeichen)

In Klammern wird wiederholt, wie viele weitere Dateitypen Sie zu Ihrer rekursiven Suche hinzufügen möchten

Ein Alias ​​sieht in bash so aus

alias fnd='find . \\( -name '\''*.java'\'' -o -name '\''*.xml'\'' \\) | xargs egrep'


Ich schlage vor, die Antwort zu ändern auf:

grep REGEX -r .

Der Schalter -r zeigt keinen regulären Ausdruck an. Es weist grep an, in das bereitgestellte Verzeichnis zurückzukehren.


Wenn Sie die zsh-Shell verwenden, die Sie verwenden können

grep REGEX **/*

oder

grep REGEX **/*.java

Wenn zu viele übereinstimmende Dateien vorhanden sind, kann dies zu Problemen führen.

Der kanonische Weg ist jedoch, find with exec zu verwenden.

find . -name '*.java' -exec grep REGEX {} \;

oder

find . -type f -exec grep REGEX {} \;

Das Bit "Typ f" bedeutet nur den Dateityp und gleicht alle Dateien ab.


grep -r, wenn Sie GNU grep verwenden, das mit den meisten Linux-Distributionen geliefert wird.

Auf den meisten UNIX-Systemen ist es nicht standardmäßig installiert, versuchen Sie es stattdessen:

finden . -type f | Xargs Grep Regex


grep -r REGEX .

Ersetzen . mit dem Verzeichnis, aus dem Sie suchen möchten.





grep