Použijte grep 's --include možnost:
grep -ir "string" --include="*.php" .
Pokud máte verzi grep který postrádá --include možnost, můžete použít následující. Oba byly testovány na adresářové struktuře, jako je tato:
$ tree
.
├── a
├── b
│ └── foo2.php
├── c
│ └── d
│ └── e
│ └── f
│ └── g
│ └── h
│ └── foo.php
├── foo1.php
└── foo.php
Kde jsou všechny .php soubory obsahují řetězec string .
-
Použijte
find$ find . -name '*php' -exec grep -H string {} + ./b/foo2.php:string ./foo1.php:string ./c/d/e/f/g/h/foo.php:stringVysvětlení
Tím se najde všech
.phpsoubory a poté spusťtegrep -H stringna každém z nich. Sfind's-execmožnost,{}je nahrazeno každým z nalezených souborů.-Hříkágrepvytiskne název souboru a odpovídající řádek. -
Za předpokladu, že máte dostatečně novou verzi
bash, použijteglobstar:$ shopt -s globstar $ grep -H string **/*php b/foo2.php:string c/d/e/f/g/h/foo.php:string foo1.php:stringVysvětlení
Jak je vysvětleno v manuálu bash:
globstar
Je-li nastaven, vzor „**“ použitý v kontextu rozšíření názvu souboru bude odpovídat všem souborům a žádnému nebo více adresářům a podadresářům. Pokud za vzorem následuje znak „/“, shodují se pouze adresáře a podadresáře.
Takže spuštěním
shopt -s globstaraktivujete funkci a Bashůvglobstarmožnost, která dělá**/*phprozbalte na všechny.phpsoubory v aktuálním adresáři (**odpovídá 0 nebo více adresářům, takže**/*phpodpovídá./foo.phptaké), které jsou pak vyhledány prostring.