grep --exclude no excluye mi archivo

8

Estoy buscando un directorio para una cadena particular (para ver todas las instancias de dónde está presente la cadena y en qué archivos). Sin embargo, quiero excluir un archivo en particular de la búsqueda.

Esto es lo que está sucediendo.

$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

Aquí está la salida que quiero.

./new_folder/good_file:searchstring
sbhatla
fuente
66
Si cambia --exclude="old_folder/useless_file"a simplemente --exclude=useless_file, ¿tiene el mismo problema? (Mi lectura de la página del manual sugiere que el patrón --excludedebe ser solo el nombre base, sin incluir la ruta.)
Comodín

Respuestas:

11

La --excludeopción toma globos que coinciden con los nombres de archivo, no directorios o rutas completas:

  --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.

Entonces, podrías hacer:

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

O, para excluir todos los archivos en ese directorio:

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