grep --excludeは私のファイルを除外しません。

grep --excludeは私のファイルを除外しません。

特定の文字列を含むディレクトリを検索しています(その文字列がある場所とファイルのすべてのインスタンスを確認するため)。ところで、特定のファイルを検索から除外したいと思います。

これはどうしたの?

$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

ベストアンサー1

この--excludeオプションは、ディレクトリやフルパスではなく、ファイル名と一致するglobを使用します。

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

おすすめ記事