grep chỉ các thư mục con phù hợp với mẫu


9

Tôi có một cây thư mục bao gồm vài nghìn thư mục con, nhưng tôi thường chỉ cần grep một tập hợp con nhỏ của các thư mục đó. Làm thế nào tôi grepchỉ có thể những thư mục con phù hợp với một mẫu?

Ví dụ: giả sử tôi có các thư mục con mà tôi muốn grep in:

...
...
...
/foo
/fooLib
/fooHandler
/fooGizmo
...
...
...

Các ...mục ở trên đại diện cho hàng ngàn thư mục khác mà tôi không muốn grep in.

Giả sử tôi đang tìm kiếm tất cả các trường hợp bar, nếu tôi làm điều này:

grep -n --recursive bar *

Tôi sẽ tìm thấy những gì tôi đang tìm kiếm, nhưng trong tất cả các thư mục. Làm thế nào tôi có thể tìm kiếm chỉ trong những thư mục con phù hợp với mẫu foo*?


Bạn có muốn tìm kiếm chỉ trong /foovà bạn bè? Trong /foo/foo/bar/foo/bar/quxnhư vậy nhưng không /wibble/foo? Trong /foo/wibble/fookhông /foo/bar? Trong /foo/foo/bar/wibble/foonhưng không /elsewhere?
Gilles 'SO- ngừng trở nên xấu xa'

Câu trả lời:


11

Bạn có thể sử dụng grep và tìm sự kết hợp như dưới đây:

find /{foo,fooLib,fooHandler,fooGizmo} -type f -exec grep -l "test" {} \;

Hoặc bạn có thể sử dụng

find /foo* -type f -exec grep -l "test" {} \;

Hoặc chỉ sử dụng grep

grep -R "test" /foo*

Tôi có thể làm điều này mà không chỉ định rõ các thư mục con không? Thay vào đó, bằng cách sử dụng một ký tự đại diện như foo*?
John Dibling

@ JohnDibling vâng tôi đã cập nhật chính xác những gì bạn đang nói :)
Rahul Patil

Gợi ý sau ( grep -R "test" /foo*) chính xác là những gì tôi thực sự đang làm bây giờ, vì vậy tôi sẽ chấp nhận.
John Dibling

Cảm ơn vì điều này. Tôi đang sử dụng mẫu đầu tiên, nhưng rất thích hiểu một vài điều về nó - ví dụ, kết thúc {}và dấu gạch chéo làm gì?
Random_user_name

Điều này cung cấp các dòng khớp với grep, nhưng vị trí của dữ liệu (tệp trong đó) bị mất. Có cách nào để giữ lại điều đó?
Jontia

0

thử grep foo* <other parts>ví dụ:grep foo* -name "book*"


Nếu tôi đang tìm tất cả các phiên bản của bartất cả các tệp trong thư mục con có tên foo*, thì đây có phải là như thế này grep --recursive bar ./foo*/*không?
John Dibling
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.