735 Stimmen

Wie kann ich Dateien finden, die ein bestimmtes Zeichenfolgenmuster nicht enthalten?

Wie erfahre ich die Dateien im aktuellen Verzeichnis, die nicht enthalten das Wort foo (mit grep )?

1062voto

ghostdog74 Punkte 305138

Wenn Ihr grep die Option -L (o --files-without-match ) Option:

$ grep -L "foo" *

95voto

Adrian Punkte 8012

Sie können dies mit grep allein tun (ohne find).

grep -riL "foo" .

Dies ist die Erklärung der Parameter, die auf grep

     -L, --files-without-match
             each file processed.
     -R, -r, --recursive
             Recursively search subdirectories listed.

     -i, --ignore-case
             Perform case insensitive matching.

Wenn Sie l (kleingeschrieben) erhalten Sie das Gegenteil (Dateien mit Übereinstimmungen)

     -l, --files-with-matches
             Only the names of files containing selected lines are written

50voto

Andy Lester Punkte 86147

Werfen Sie einen Blick auf ack . Es tut die .svn Ausschluss für Sie automatisch, gibt Ihnen reguläre Perl-Ausdrücke und ist ein einfacher Download eines einzigen Perl-Programms.

Das Äquivalent zu dem, wonach Sie suchen, sollte lauten ack :

ack -L foo

31voto

Senthil Kumar Punkte 8787

Mit dem folgenden Befehl erhalte ich alle Dateien, die das Muster nicht enthalten foo :

find .  -not  -ipath '.*svn*' -exec  grep  -H -E -o -c  "foo"  {} \; | grep 0

17voto

user999305 Punkte 965

Der folgende Befehl macht es überflüssig, dass der Befehl find die svn Ordnern durch Verwendung eines zweiten grep .

grep -rL "foo" ./* | grep -v "\.svn"

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X