grep --exclude schließt meine Datei nicht aus

8

Ich suche in einem Verzeichnis nach einer bestimmten Zeichenfolge (um alle Instanzen zu sehen, in denen die Zeichenfolge vorhanden ist und in welchen Dateien). Ich möchte jedoch eine bestimmte Datei von der Suche ausschließen.

Hier ist was passiert-

$echo "searchstring" > ./old_folder/useless_file
$echo "searchstring" > ./new_folder/good_file
$grep -r --exclude="old_folder/useless_file" searchstring *
./old_folder/useless_file:searchstring
./new_folder/good_file:searchstring

Hier ist die Ausgabe, die ich will-

./new_folder/good_file:searchstring
sbhatla
quelle
6
Wenn Sie --exclude="old_folder/useless_file"einfach wechseln , --exclude=useless_filebekommen Sie das gleiche Problem? (Meine Lektüre der Manpage legt nahe, dass das Muster --excludenur der Basisname sein sollte, ohne den Pfad.)
Wildcard

Antworten:

11

Die --excludeOption verwendet Globs, die mit Dateinamen abgeglichen werden, nicht mit Verzeichnissen oder vollständigen Pfaden:

  --exclude=GLOB
          Skip   files  whose  base  name  matches  GLOB  (using  wildcard
          matching).  A file-name  glob  can  use  *,  ?,  and  [...]   as
          wildcards,  and  \  to  quote  a wildcard or backslash character
          literally.

Sie könnten also Folgendes tun:

$ grep -r --exclude="*useless_file*" searchstring 
new_folder/good_file:searchstring

Oder um alle Dateien in diesem Verzeichnis auszuschließen:

$ grep -r --exclude-dir="old_folder" searchstring 
new_folder/good_file:searchstring
terdon
quelle