grep を使用 の --include オプション:
grep -ir "string" --include="*.php" .
grep のバージョンをお持ちの場合 --include がない オプションで、以下を使用できます。これらは両方とも、次のようなディレクトリ構造でテストされました:
$ tree
.
├── a
├── b
│ └── foo2.php
├── c
│ └── d
│ └── e
│ └── f
│ └── g
│ └── h
│ └── foo.php
├── foo1.php
└── foo.php
すべての .php ファイルには文字列 string が含まれています .
find を使用
$ find . -name '*php' -exec grep -H string {} +
./b/foo2.php:string
./foo1.php:string
./c/d/e/f/g/h/foo.php:string
説明
これにより、すべての .php が検出されます ファイルを作成してから grep -H string を実行します それらのそれぞれに。 find で の -exec オプション、{} 見つかった各ファイルに置き換えられます。 -H grep に伝えます ファイル名と一致した行を出力します。
bash の十分に新しいバージョンがあるとします。 、 globstar を使用 :
$ shopt -s globstar
$ grep -H string **/*php
b/foo2.php:string
c/d/e/f/g/h/foo.php:string
foo1.php:string
説明
bash マニュアルで説明されているとおり:
<ブロック引用>グロブスター
設定されている場合、ファイル名展開コンテキストで使用されるパターン ‘**’ は、すべてのファイルと 0 個以上のディレクトリとサブディレクトリに一致します。パターンの後に「/」が続く場合、ディレクトリとサブディレクトリのみが一致します。
shopt -s globstar を実行することで あなたは機能を有効にしており、Bash の globstar **/*php にするオプション すべての .php に展開 現在のディレクトリ内のファイル (** 0 個以上のディレクトリに一致するため、**/*php ./foo.php に一致 同様に) string が grep されます .