grep --exclude không loại trừ tệp của tôi


8

Tôi đang tìm kiếm một thư mục cho một chuỗi cụ thể (để xem tất cả các trường hợp nơi chuỗi đó có mặt và trong các tệp nào). Tuy nhiên, tôi muốn loại trừ một tệp cụ thể khỏi bị tìm kiếm.

Đây là những gì đang xảy ra-

$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

Đây là đầu ra tôi muốn-

./new_folder/good_file:searchstring

6
Nếu bạn thay đổi --exclude="old_folder/useless_file"để đơn giản là --exclude=useless_filebạn có gặp vấn đề tương tự không? (Việc đọc trang man của tôi gợi ý mẫu chỉ --excludenên là tên cơ sở, không bao gồm đường dẫn.)
Wildcard

Câu trả lời:


11

Các --excludetùy chọn có những đống đó được kết hợp chống lại tên file, không phải thư mục hoặc đường dẫn đầy đủ:

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

Vì vậy, bạn có thể làm:

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

Hoặc, để loại trừ tất cả các tệp trong thư mục đó:

$ grep -r --exclude-dir="old_folder" searchstring 
new_folder/good_file:searchstring
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.