Usa grep --include di opzione:
grep -ir "string" --include="*.php" .
 
 Se hai una versione di grep a cui manca il --include opzione, è possibile utilizzare quanto segue. Entrambi sono stati testati su una struttura di directory come questa:
$ tree
.
├── a
├── b
│   └── foo2.php
├── c
│   └── d
│       └── e
│           └── f
│               └── g
│                   └── h
│                       └── foo.php
├── foo1.php
└── foo.php
 
 Dove tutti i .php i file contengono la stringa string .
-  
Usa
find$ find . -name '*php' -exec grep -H string {} + ./b/foo2.php:string ./foo1.php:string ./c/d/e/f/g/h/foo.php:stringSpiegazione
Questo troverà tutti i
.phpfile e quindi eseguiregrep -H stringsu ciascuno di essi. Confind-execdi opzione,{}è sostituito da ognuno dei file trovati. Il-Hdicegrepper stampare il nome del file e la riga corrispondente. -  
Supponendo che tu abbia una versione abbastanza nuova di
bash, utilizzaglobstar:$ shopt -s globstar $ grep -H string **/*php b/foo2.php:string c/d/e/f/g/h/foo.php:string foo1.php:stringSpiegazione
Come spiegato nel manuale di bash:
globstar
Se impostato, il modello "**" utilizzato in un contesto di espansione del nome file corrisponderà a tutti i file e a zero o più directory e sottodirectory. Se lo schema è seguito da un '/', corrispondono solo directory e sottodirectory.
Quindi, eseguendo
shopt -s globstarstai attivando la funzione e ilglobstardi Bash opzione che rende**/*phpespandi a tutti i.phpfile nella directory corrente (**corrisponde a 0 o più directory, quindi**/*phpcorrisponde a./foo.phpanche) che vengono poi grep perstring.