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:string
Explicación
Esto encontrará todos los
.php
archivos y luego ejecutegrep -H string
en cada uno de ellos. Confind
-exec
opción,{}
se reemplaza por cada uno de los archivos encontrados. El-H
le dice agrep
para 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:string
Explicació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 globstar
está activando la función y elglobstar
de Bash opción que hace**/*php
expandir a todos.php
archivos en el directorio actual (**
coincide con 0 o más directorios, por lo que**/*php
coincide con./foo.php
también) que luego son grepped parastring
.