it-swarm-vi.tech

grep tất cả các tệp .Java trong một thư mục cho một chuỗi cụ thể

Làm cách nào để tôi tìm kiếm tất cả các tệp .Java cho một chuỗi đơn giản (không phải regex) trong thư mục hiện tại và tất cả các thư mục con trên Mac OS X? Tôi chỉ muốn in một danh sách các tên tập tin và thư mục phù hợp.

12
John Topley

Và luôn luôn phổ biến

find . -name '*.Java' | xargs grep -l 'string'

CHỈNH SỬA (bởi Frank Szczerba):

Nếu bạn đang xử lý tên tệp hoặc thư mục có khoảng trắng trong đó, cách an toàn nhất để thực hiện việc này là:

find . -name '*.Java' -print0 | xargs -0 grep -l 'string'

Luôn luôn có nhiều hơn một cách để làm điều đó.

19
David Mackintosh

Câu trả lời UNIX truyền thống sẽ là câu trả lời được chấp nhận cho câu hỏi này:

find . -name '*.Java' | xargs grep -l 'string'

Điều này có thể sẽ hoạt động cho các tệp Java, nhưng không gian trong tên tệp phổ biến hơn nhiều trên Mac so với trong thế giới UNIX truyền thống. Khi tên tệp có dấu cách được truyền qua đường dẫn ở trên, xargs sẽ diễn giải các từ riêng lẻ thành các tên khác nhau.

Những gì bạn thực sự muốn là tách biệt các tên để làm cho ranh giới rõ ràng:

find . -name '*.Java' -print0 | xargs -0 grep -l 'string'

Cách khác là để tìm chạy grep cho bạn, như Mark gợi ý, mặc dù cách tiếp cận đó chậm hơn nếu bạn đang tìm kiếm số lượng lớn tệp (vì grep được gọi một lần trên mỗi tệp thay vì một lần với toàn bộ danh sách tệp).

11
Frank Szczerba

Sử dụng grep tốt hơn grep, ack :

ack -l --Java  "string" 
6
bortzmeyer

Điều này thực sự sẽ sử dụng một regex nếu bạn muốn, chỉ cần tránh xa các siêu nhân vật hoặc thoát chúng và bạn có thể tìm kiếm các chuỗi.

find . -iname "*.Java" -exec egrep -il "search string" {} \;
4
Mark Thalman
grep -rl --include="*.Java" simplestring *
3
js.

Vì đây là câu hỏi về OSX, đây là câu trả lời cụ thể hơn về OSX.

Bỏ qua find và sử dụng Spotlight từ dòng lệnh. Mạnh mẽ hơn nhiều!

LINE LINE SPOTLIGHT - TÌM MEETS GREP

Hầu hết mọi người không biết rằng bạn có thể thực hiện tìm kiếm Spotlight từ dòng lệnh. Tại sao phải nhớ tất cả các tùy chọn tìm kiếm và grep phức tạp và những gì không phải khi bạn có thể để Spotlight thực hiện công việc cho bạn. Giao diện dòng lệnh đến Spotlight được gọi là mdfind. Nó có tất cả sức mạnh tương tự như tìm kiếm GUI Spotlight và hơn thế nữa vì nó có thể được viết theo dòng lệnh!

1
Jarrod Roberson
grep "(your string)" -rl $(find ./ -name "*.Java")

Nếu bạn muốn bỏ qua trường hợp, thay thế -rl bằng -irl. (chuỗi của bạn) cũng có thể là một biểu thức chính quy nếu bạn thấy cần.

0
laughing_man

Hãy thử đi:

grep -rl "string" */*Java
0
dwj