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 されます .