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:string
Spiegazione
Questo troverà tutti i
.php
file e quindi eseguiregrep -H string
su ciascuno di essi. Confind
-exec
di opzione,{}
è sostituito da ognuno dei file trovati. Il-H
dicegrep
per 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:string
Spiegazione
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 globstar
stai attivando la funzione e ilglobstar
di Bash opzione che rende**/*php
espandi a tutti i.php
file nella directory corrente (**
corrisponde a 0 o più directory, quindi**/*php
corrisponde a./foo.php
anche) che vengono poi grep perstring
.