ディレクトリ内の特定のファイルを再帰的にgrepするにはどうすればよいですか?


14

私はlinuxとgrepに慣れていません。

を使って find -name *.java 特定のディレクトリにあるすべてのJavaファイルの名前を見つけることができます。回数を数えたいとします。 foo これらのファイルで発生した場合、どうすればよいでしょうか。

私は次のようなことを試しています。

grep -r "foo" *.java

そして次のような反応を得ます。

grep:  *.java:  No such file or directory

何か案は?



1
申し訳ありませんが、次回はもっと難しくなります。質問がとても似ていたことは注目に値します。
Eric Wilson

1
3512のタイトルは ロット もっと良かった。 「基本的なgrep使用法の質問」は実際の質問についてあなたに多くを伝えません。それが修正されない限り、我々はおそらくもっと多くの複製を持っているでしょう。
Richard Hoskins

1
@richardhoskins、修正済み。
John T

回答:


16
find . -name '*.java' | xargs grep <your pattern here>

5
さらに良いのは、空白を含む項目を使用して、スペースを含むファイル名が2つのファイル名に分割されないようにすることです。 -name '* .java' -type f -print0 | xargs -0 grep&lt;あなたのパターンはこちら&gt;
CoverosGene

1
@CoverosGene:これを処理するためにxargsに--replaceオプションを使用できます。 xargs --replace grep "{}"&lt; pattern&gt;
arathorn

どうもありがとうございます xargs します。
Eric Wilson

6

このようなニーズに合わせて特別に設計されたツールがあります。 確認する

ackはgrepのようなツールで、異種のソースコードの大きな木を持つプログラマを対象としています。

また読む 「grepの代わりにackを使う10の理由」 確認する ページ。


1
ええと。本物のunixツールは、その遺産を参照する再帰的な名前を必要とします…abtg [ABTGのBetter Than Grep]、または何かのようなものです。 ACK?それについての唯一の良い考えは、改良されたNACKの作者がすでに選ばれた名前を持っているということです;)
Mikeage

私が本当にackが好きな理由の一つはあなたがファイルタイプを指定できるということです。たとえば、「ack --html&lt; pattern&gt;」と入力します。それは私のすべての.html、.htm、.xhtml、.dhtmlなどのファイルを一度に検索します。
Mark van Lent

Ackは私の代わりにgrepをほぼ置き換えました。
Ryan Thompson


0

見つけます。 -type f -name '* .java' -print0 | xargs -0 grep -wo 'foo' | wc -l


3
SuperUserへようこそ!最新の質問(2009年の質問)に対する回答が多いほど、またなぜ既に回答が承認されている回答よりも優れているのかを説明すると、回答がより注目を集めるようになります。
Eric Wilson

@EricWilsonアドバイスをありがとう:)
wudeng
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.