2011-07-04 45 views
20

我想用grep查找當前目錄下所有java文件中包含String的行。如何在子目錄中的所有java文件中grep一個字符串?

我想:

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

但它不工作:

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

怎麼寫呢?


UPDATE

我在Windows下使用,通過grepunxUtils,不支持--include參數提供。有沒有其他方法?

+0

對於**'Windows' **,我在[SourceForge](http://astrogrep.sourceforge.net/)上推薦一個名爲[AstroGrep](http://astrogrep.sourceforge.net/)的程序。它是基於GUI的,默認的複選框是「搜索子文件夾」。我非常喜歡它,我只希望在我的Linux機器上有相當的...〜感嘆〜 – will

回答

44

使用遞歸的grep:

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

謝謝。我發現它適用於Linux,但現在我在Windows上。有沒有其他方法? – Freewind

+0

如果你已經安裝了cygwin,同樣的命令也可以在Windows上運行,但我實際上已經嘗試了我的cygwin,並且它在Windows 7上運行良好。 – anubhava

+1

在windows上我建議http://gnuwin32.sourceforge.net/ – culmat

4

我猜unxUtils提供find效用。所以,你可以嘗試這樣做:

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

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

第一個版本會爲找到的每個文件執行一個grep命令。後者版本將只執行儘可能多的grep命令,但不是每個find版本都支持+參數。

+0

壞消息是'find。 -name「* .java」'不適用於'unxUtils'的'fild',它會報告'File not found - * .java'。最後,我剛安裝了'cygwin' – Freewind

+0

在搜索中添加一個文件名可能會有所幫助,從而使它更容易。打印參數將在這裏幫助:查找。 -name「* .java」-print -exec grep「String」{} \; –

相關問題