Usa grep de --include opción:
grep -ir "string" --include="*.php" .
Si tienes una versión de grep que carece del --include opción, puede usar lo siguiente. Ambos fueron probados en una estructura de directorios como esta:
$ tree
.
├── a
├── b
│ └── foo2.php
├── c
│ └── d
│ └── e
│ └── f
│ └── g
│ └── h
│ └── foo.php
├── foo1.php
└── foo.php
Donde todos los .php los archivos contienen la cadena string .
-
Utilice
find$ find . -name '*php' -exec grep -H string {} + ./b/foo2.php:string ./foo1.php:string ./c/d/e/f/g/h/foo.php:stringExplicación
Esto encontrará todos los
.phparchivos y luego ejecutegrep -H stringen cada uno de ellos. Confind-execopción,{}se reemplaza por cada uno de los archivos encontrados. El-Hle dice agreppara imprimir el nombre del archivo, así como la línea coincidente. -
Suponiendo que tiene una versión lo suficientemente nueva de
bash, usaglobstar:$ shopt -s globstar $ grep -H string **/*php b/foo2.php:string c/d/e/f/g/h/foo.php:string foo1.php:stringExplicación
Como se explica en el manual de bash:
globstar
Si se establece, el patrón '**' utilizado en un contexto de expansión de nombre de archivo coincidirá con todos los archivos y cero o más directorios y subdirectorios. Si el patrón va seguido de un '/', solo coinciden los directorios y subdirectorios.
Entonces, al ejecutar
shopt -s globstarestá activando la función y elglobstarde Bash opción que hace**/*phpexpandir a todos.phparchivos en el directorio actual (**coincide con 0 o más directorios, por lo que**/*phpcoincide con./foo.phptambién) que luego son grepped parastring.