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:string
Explication
Cela trouvera tous les
.php
fichiers, puis exécutezgrep -H string
sur chacun d'eux. Avecfind
est-exec
option,{}
est remplacé par chacun des fichiers trouvés. Le-H
indiquegrep
pour 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:string
Explication
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 globstar
vous activez la fonctionnalité andBash'sglobstar
option qui fait**/*php
étendre à tous les.php
fichiers dans le répertoire courant (**
correspond à 0 ou plusieurs répertoires, donc**/*php
correspond à./foo.php
ainsi) qui sont ensuite grep pourstring
.