2011-07-04 29 views
20

Tôi muốn sử dụng grep để tìm các dòng chứa String trong tất cả các tệp java trong thư mục hiện tại.Làm cách nào để grep một Chuỗi trong tất cả các tệp java trong các thư mục con?

tôi đã cố gắng:

grep -r "String" **/*.java 

Nhưng nó không hoạt động:

grep : **/*.java: no such file or directory 

Làm thế nào để viết nó?


CẬP NHẬT

Tôi đang trên cửa sổ, sử dụng được cung cấp bởi grepunxUtils, mà không hỗ trợ --include tham số. Còn cách nào khác không?

+0

Đối với ** 'Windows' **, tôi đề xuất một chương trình có tên [AstroGrep] (http://astrogrep.sourceforge.net/) trên [SourceForge] (http://astrogrep.sourceforge.net/) .. Nó dựa trên GUI và hộp đánh dấu mặc định là "Tìm kiếm thư mục con". Tôi thích nó rất nhiều Tôi chỉ muốn có tương đương trên hộp Linux của tôi ... ~ thở dài ~ – will

Trả lời

44

Sử dụng đệ quy grep:

grep -r "String" --include=*.java . 
+1

cảm ơn bạn. Tôi tìm thấy nó hoạt động trên Linux, nhưng bây giờ tôi đang trên cửa sổ. Còn cách nào khác không? – Freewind

+0

Nếu bạn có lệnh cài đặt Cygwin cùng một lệnh sẽ hoạt động trên Windows, tôi thực sự đã thử trên Cygwin của mình và nó cũng hoạt động tốt trên Windows 7. – anubhava

+1

trên cửa sổ Tôi đề nghị http://gnuwin32.sourceforge.net/ – culmat

4

Tôi đoán unxUtils cung cấp các tiện ích find. Vì vậy, bạn có thể thử để làm:

find . -name "*.java" -exec grep "String" {} \; 

hoặc

find . -name "*.java" -exec grep "String" {} \+ 

Phiên bản đầu tiên sẽ thực hiện một grep lệnh cho mỗi tập tin được tìm thấy. Phiên bản thứ hai sẽ chỉ thực hiện nhiều lệnh grep nếu cần nhưng không phải mọi phiên bản find đều hỗ trợ đối số +.

+0

Tin xấu là 'tìm. -name "* .java" 'không hoạt động với' fild' của 'unxUtils', nó báo cáo' Không tìm thấy tập tin - * .java'. Cuối cùng, tôi chỉ cài đặt 'cygwin' – Freewind

+0

Có thể hữu ích khi thêm tên tệp như một phần của tìm kiếm để làm cho nó dễ dàng hơn. Đối số in sẽ trợ giúp ở đây: tìm. -name "* .java" -print -exec grep "Chuỗi" {} \; –

Các vấn đề liên quan