grep --exclude tidak mengecualikan file saya

8

Saya mencari dir untuk string tertentu (untuk melihat semua contoh di mana string hadir dan di mana file). Namun, saya ingin mengecualikan satu file tertentu agar tidak dicari.

Inilah yang sedang terjadi-

$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

Berikut adalah output yang saya inginkan-

./new_folder/good_file:searchstring
sbhatla
sumber
6
Jika Anda berubah --exclude="old_folder/useless_file"hanya --exclude=useless_fileapakah Anda mendapatkan masalah yang sama? (Bacaan saya tentang halaman manual menunjukkan bahwa pola --excludeharus menjadi nama saja, tidak termasuk jalur.)
Wildcard

Jawaban:

11

The --excludepilihan mengambil gumpalan yang cocok dengan nama file, bukan direktori atau jalur penuh:

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

Jadi, Anda bisa melakukan:

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

Atau, untuk mengecualikan semua file dalam direktori itu:

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