grep --excludeでファイルが除外されない


8

特定の文字列をdirで検索しています(文字列が存在する場所とファイルのすべてのインスタンスを確認するため)。ただし、特定のファイルを検索から除外したいのですが。

これが起こっていることです

$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

6
--exclude="old_folder/useless_file"単純に変更すると--exclude=useless_file、同じ問題が発生しますか?(私のmanページを読むと、パターン--excludeはベース名のみであり、パスは含まれないことが推奨されています。)
ワイルドカード

回答:


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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.