2011-07-04 8 views
20

grepを使用して、現在のディレクトリのすべてのjavaファイルにStringという行が含まれていることを確認します。サブディレクトリのすべてのjavaファイルで文字列をgrepする方法はありますか?

は、私が試した:

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

しかし、それは動作しません:

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

どのようにそれを書くために?


UPDATE

私は--includeパラメータをサポートしていませんunxUtilsによって提供さgrepを使用して、Windows上です。他の方法はありますか?

+0

** 'Windows' **では、[SourceForge](http://astrogrep.sourceforge.net/)で[AstroGrep](http://astrogrep.sourceforge.net/)というプログラムをお勧めします。 GUIベースで、デフォルトのチェックボックスは「サブフォルダの検索」です。私はそれが好きなので、私はちょうどそこに私のLinuxボックスで同等のものがあったと思って...〜一口〜 – will

答えて

44

使用再帰のgrep:

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

ありがとう。私はそれがLinux上で動作することがわかったが、今私は窓の上にいる。他の方法はありますか? – Freewind

+0

同じコマンドをcygwinにインストールしてもWindowsでも動作しますが、実際にcygwinで試してみましたが、Windows 7でも正常に動作しました。 – anubhava

+1

私はhttp://gnuwin32.sourceforge.net/を提案します – culmat

4

私はunxUtilsfindユーティリティを提供しね。だから、やるしようとすることができます:

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

または

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

最初のバージョンが見つかった各ファイルに対して1つのgrepのコマンドを実行します。後者のバージョンは、必要な数だけgrepコマンドを実行しますが、findのすべてのバージョンが+引数をサポートしているとは限りません。

+0

悪いニュースは 'findです。 -name "* .java" 'は' unxUtils'の 'fild'に対しては機能しません。' File not found - * .java'を報告します。最後に、私はちょうど 'cygwin'をインストールしました – Freewind

+0

検索の一部としてファイル名を追加すると便利です。 print引数はここで助けます:find。 -name "* .java" -print -exec grep "文字列" {} \; –

関連する問題