再帰的なgrep。ファイルパターンを指定しない場合と指定する場合。

検索対象ファイルのパターンを指定しないでよい場合

(かつ grep の -r オプションがサポートされている場合 ← manで確認)


検索対象ファイルのパターンを指定しないでよい場合は、
↓のようにすることで、指定したディレクトリ(target_directory)以下
全てのファイルをサブディレクトリも含めて検索することができる。

grep -r PATTERN target_directory
例: grep -r 'monday' . ← カレント以下のファイルで文字列mondayを含んだものを再帰的に検索する。

または

grep -d recurse PATTERN target_directory

または

grep --directories recurse PATTERN target_directory


参考リンク:
man
http://www.linux.or.jp/JM/html/GNU_grep/man1/grep.1.html
grep -r の場合でも、ついついファイルパターンを指定してしまう、と、
「マニュアル読め」っておこられる...
http://lists.gnu.org/archive/html/bug-gnu-utils/2001-08/msg00010.html

検索対象ファイルのパターンを指定したい場合

(または grep の -r オプションがサポートされていない場合 ← manで確認)


検索対象ファイルのパターンを指定したい場合は、次のような方法が考えられる。
(a) 上記の grep -r 実行し、実行結果を整形する。
(b) findと組み合わせてgrepを実行し、あらかじめファイルのパターンにマッチする
ファイルにしか grep が実行されないようにする。

(a) grep -r 実行し、実行結果を整形する


カレントディレクトリ以下の.javaファイルで文字列'final'を含むもののみを表示

grep -r 'final' . | grep .java

grep -r 'final' . の出力内容が、grep .java の検索対象となる。

(b) findと組み合わせてgrepを実行する


カレントディレクトリ以下の.javaファイルのみ検索し、文字列'final'を含むものを表示

find . -name '*.java' | xargs grep 'final'

→ find . -name '*.java' 結果のファイルひとつひとつが、grep 'final' の検索対象となる。
xargsを忘れないで。xargsを忘れてパイプだけにすると、
目的が変わってしまって、「ファイル名が'*.java'でパスに文字列'final'が
含まれているもの」、となってしまう。