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:string
Vysvětlení
Tím se najde všech
.php
soubory a poté spusťtegrep -H string
na každém z nich. Sfind
's-exec
možnost,{}
je nahrazeno každým z nalezených souborů.-H
říkágrep
vytiskne 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:string
Vysvě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 globstar
aktivujete funkci a Bashůvglobstar
možnost, která dělá**/*php
rozbalte na všechny.php
soubory v aktuálním adresáři (**
odpovídá 0 nebo více adresářům, takže**/*php
odpovídá./foo.php
také), které jsou pak vyhledány prostring
.