Utilisez grep est --include choix :
grep -ir "string" --include="*.php" .
Si vous avez une version de grep qui manque le --include option, vous pouvez utiliser ce qui suit. Ils ont tous deux été testés sur une structure de répertoire comme celle-ci :
$ tree
.
├── a
├── b
│ └── foo2.php
├── c
│ └── d
│ └── e
│ └── f
│ └── g
│ └── h
│ └── foo.php
├── foo1.php
└── foo.php
Où tous les .php les fichiers contiennent la chaîne string .
-
Utilisez
find$ find . -name '*php' -exec grep -H string {} + ./b/foo2.php:string ./foo1.php:string ./c/d/e/f/g/h/foo.php:stringExplication
Cela trouvera tous les
.phpfichiers, puis exécutezgrep -H stringsur chacun d'eux. Avecfindest-execoption,{}est remplacé par chacun des fichiers trouvés. Le-Hindiquegreppour imprimer le nom du fichier ainsi que la ligne correspondante. -
En supposant que vous ayez une version suffisamment récente de
bash, utilisezglobstar:$ shopt -s globstar $ grep -H string **/*php b/foo2.php:string c/d/e/f/g/h/foo.php:string foo1.php:stringExplication
Comme expliqué dans le manuel bash :
globstar
S'il est défini, le modèle "**" utilisé dans un contexte d'extension de nom de fichier correspondra à tous les fichiers et à zéro ou plusieurs répertoires et sous-répertoires. Si le modèle est suivi d'un "/", seuls les répertoires et les sous-répertoires correspondent.
Donc, en exécutant
shopt -s globstarvous activez la fonctionnalité andBash'sglobstaroption qui fait**/*phpétendre à tous les.phpfichiers dans le répertoire courant (**correspond à 0 ou plusieurs répertoires, donc**/*phpcorrespond à./foo.phpainsi) qui sont ensuite grep pourstring.