Loại trừ các thư mục con ẩn khỏi grep -r


22

Tôi có một bản sao địa phương svn, tôi muốn thực hiện tìm kiếm trên chuỗi some_ chuỗi.

$ grep some_string * -r
lang/en:some_string=Some string
lang/.svn/en:some_string=Some string

Nhưng nếu đi xa hơn một chút, có vẻ như các thư mục ẩn cấp đầu tiên bị loại trừ:

$ cd lang && grep some_string * -r
en:some_string=Some string

Làm cách nào tôi có thể xóa thư mục svn ẩn khỏi đầu ra của mình và không chỉ từ cấp độ sâu đầu tiên?

$ grep some_string * -r --which_option_here?
lang/en:some_string=Some string

Không phải là một câu trả lời trực tiếp, nhưng bạn có thể muốn thử ack .
tước

Câu trả lời:


21

Sử dụng --exclude-dirtùy chọn, ví dụ:

grep -r --exclude-dir='.*' some_string

Từ man grep:

--exclude-dir=DIR
              Exclude directories matching the pattern DIR from recursive searches.

Lưu ý, tuy nhiên, --exclude-dirtùy chọn đó chỉ khả dụng trong GNU grep. Nếu bạn grepkhông hỗ trợ nó, bạn có thể cần sử dụng công cụ khác như tìm ví dụ :

find . \( -name .svn -prune \) -o -name "*" -exec grep -H "some_string" {} 2>/dev/null \;

Tôi phải có một Linux quá cũ ...
MUY Bỉ

Tôi đã chỉnh sửa câu trả lời, hãy thử findphiên bản nếu grep của bạn không hỗ trợ --exclude-dir.
jimmij

Tôi có phiên bản grep phiên bản 2.5.1 và không có đối số --exclude-dir và tôi đã thử mọi thứ tôi nghĩ về ...
MUY Bỉ

1
Giải pháp thứ hai không sử dụng --exclude-dir, bạn đã thử chưa?
jimmij

Tôi có "tùy chọn không được chấp nhận"
MUY Bỉ

1

Tôi thường sử dụng cái này:

for e in $(find . -maxdepth 1 -type d); do echo ${e#\./}; done | grep -v '^\.'

${e%\./}sẽ xóa cái đầu tiên ./và sau đó greploại bỏ mọi thứ bắt đầu bằng dấu chấm.


Code nói e#, văn bản nóie%
Stephen Rauch
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.