grep --exclude не исключает мой файл

8

Я ищу каталог для конкретной строки (чтобы увидеть все случаи, где строка присутствует и в каких файлах). Однако я хочу исключить один конкретный файл из поиска.

Вот что происходит

$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

Вот вывод, который я хочу-

./new_folder/good_file:searchstring
sbhatla
источник
6
Если вы измените --exclude="old_folder/useless_file"просто, --exclude=useless_fileу вас возникла та же проблема? (Мое чтение справочной страницы предполагает, что шаблон --excludeдолжен быть только базовым именем, не включая путь.)
Wildcard

Ответы:

11

--excludeОпция принимает шарики, которые подбираются с именами файлов, а не каталоги или полные пути:

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

Итак, вы можете сделать:

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

Или, чтобы исключить все файлы в этом каталоге:

$ grep -r --exclude-dir="old_folder" searchstring 
new_folder/good_file:searchstring
Тердон
источник