Sử dụng grep với cờ --exclude-dir để loại trừ nhiều thư mục


15

Tôi đang tìm kiếm thông qua ứng dụng Ruby on Rails cho một từ bằng cách sử dụng greptrên OSX và tôi muốn loại trừ các thư mục phù hợp với một mẫu nhất định.

Tôi đang sử dụng lệnh sau:

grep -inRw -E 'direct' . --exclude-dir -E 'git|log|asset'

Lệnh này không làm những gì tôi nghĩ nó sẽ làm. Đây là cách tôi nghĩ nó sẽ hoạt động:

  • i - tìm kiếm không nhạy cảm
  • n - số dòng in trong đó mẫu được tìm thấy
  • R - tìm kiếm đệ quy
  • w - Tôi chỉ muốn toàn bộ từ - nghĩa là khớp "trực tiếp" chứ không phải "thư mục"
  • -E - sử dụng biểu thức chính quy mở rộng
  • 'thẳng thắn' - biểu thức chính quy tôi muốn khớp
  • .- tìm kiếm trong thư mục hiện tại
  • --exclude-dir -E 'git | log | property' - loại trừ các thư mục khớp với git hoặc log hoặc tài sản.

Về các thư mục loại trừ, lệnh vẫn kết thúc tìm kiếm trong thư mục './git''./log' , cũng như trong './app/assets'

Tôi rõ ràng là thiếu một kiến ​​thức cơ bản, nhưng tôi không biết nó là gì.

Câu trả lời:


16

Các mô tả người đàn ông trang cho tùy chọn đó là loại gây hiểu lầm ... Đó là mô hình như trong những đống không mẫu như trong regex . Trên mỗi infotrang :

--exclude-dir = GLOB

Bỏ qua mọi thư mục dòng lệnh có hậu tố tên khớp với mẫu GLOB. Khi tìm kiếm đệ quy, bỏ qua mọi thư mục con có tên cơ sở khớp với GLOB. Bỏ qua mọi dấu gạch chéo thừa trong GLOB.

Vì vậy, trong trường hợp của bạn, bạn có thể chạy:

grep -inRw -E 'direct' . --exclude-dir={git,log,assets}

để loại trừ các thư mục có tên git, logassetshoặc vd

grep -inRw -E 'direct' . --exclude-dir={\*git,asset\*}

để loại trừ tên thư mục kết thúc bằng githoặc bắt đầu bằng asset.


Rất thú vị. Tôi đoán tôi nên tìm kiếm một quả địa cầu là gì.
Steven L.

Tôi xin lỗi nhưng không ai trong số này dường như đang làm việc. Nó có giúp ích gì không nếu tôi nói rằng tôi đang sử dụng phiên bản grep: grep (BSD grep) 2.5.1-FreeBSD này?
Steven L.

Tôi bối rối vì tôi đang đọc hướng dẫn sử dụng bsd grep ( freebsd.org/cgi/man.cgi?query=grep&sektion=&n=1 ) và không đề cập đến --exclude-dir. Boo.
Steven L.

2
OK - Tôi thấy vấn đề bây giờ. Đây phải là phiên bản sửa đổi của grep chỉ được sử dụng bởi hệ thống Apple. Tôi đang dùng Mac OS X. Tôi xin lỗi vì sự nhầm lẫn ở đây. Tôi chắc chắn có một diễn đàn ở một nơi khác trên stackexchange tôi có thể đăng lên.
Steven L.

@ user245185 bạn đang ở trên BSD hay trên OSX? Cả hai đều có chủ đề ở đây, nhưng vui lòng chỉnh sửa câu hỏi của bạn và cho chúng tôi biết bạn đang sử dụng hệ điều hành nào. Các hành vi của các công cụ tiêu chuẩn khác nhau giữa các triển khai khi bạn khám phá.
terdon

8

--exclude-dirkhông hiểu |.

Tuy nhiên, bạn có thể có được hiệu ứng tương tự bằng cách chỉ định --exclude-dirnhiều lần, một lần cho mỗi thư mục mà bạn muốn loại trừ:

grep -inRw -E --exclude-dir 'asset' --exclude-dir 'git' --exclude-dir 'log' 'direct'

Nó làm việc cho tôi. Tôi muốn loại trừ thư mục chính nhưng nó không hoạt động với các tùy chọn khác như --exclude-dir={home}. Tôi đã làm việc khi tôi gõ--exclude-dir 'home'
Mubin Icyer
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.