grep --exclude não exclui meu arquivo

8

Estou procurando um diretório para uma seqüência específica (para ver todas as instâncias de onde a seqüência está presente e em quais arquivos). No entanto, desejo excluir um arquivo específico da pesquisa.

Aqui está o que está acontecendo.

$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

Aqui está a saída que eu quero:

./new_folder/good_file:searchstring
sbhatla
fonte
6
Se você mudar --exclude="old_folder/useless_file"para simplesmente --exclude=useless_file, obtém o mesmo problema? (Minha leitura da página do manual sugere que o padrão --excludedeve ser apenas o nome da base, sem incluir o caminho.) #
Wildcard

Respostas:

11

A --excludeopção aceita globs correspondentes aos nomes dos arquivos, não diretórios ou caminhos completos:

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

Então, você poderia fazer:

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

Ou, para excluir todos os arquivos nesse diretório:

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