Verwenden Sie grep ist --include Möglichkeit:
grep -ir "string" --include="*.php" .
Wenn Sie eine Version von grep haben dem fehlt die --include Option können Sie Folgendes verwenden. Diese wurden beide auf einer Verzeichnisstruktur wie dieser getestet:
$ tree
.
├── a
├── b
│ └── foo2.php
├── c
│ └── d
│ └── e
│ └── f
│ └── g
│ └── h
│ └── foo.php
├── foo1.php
└── foo.php
Wo alle .php Dateien enthalten die Zeichenfolge string .
-
Verwenden Sie
find$ find . -name '*php' -exec grep -H string {} + ./b/foo2.php:string ./foo1.php:string ./c/d/e/f/g/h/foo.php:stringErklärung
Dadurch werden alle
.phpgefunden Dateien und führen Sie danngrep -H stringaus auf jedem von ihnen. Mitfindist-execOption,{}wird durch jede der gefundenen Dateien ersetzt. Die-Hsagtgrepum den Dateinamen sowie die übereinstimmende Zeile zu drucken. -
Angenommen, Sie haben eine ausreichend neue Version von
bash, verwenden Sieglobstar:$ shopt -s globstar $ grep -H string **/*php b/foo2.php:string c/d/e/f/g/h/foo.php:string foo1.php:stringErklärung
Wie im Bash-Handbuch erklärt:
globstar
Wenn gesetzt, stimmt das Muster „**“, das in einem Dateinamenerweiterungskontext verwendet wird, mit allen Dateien und null oder mehr Verzeichnissen und Unterverzeichnissen überein. Wenn auf das Muster ein „/“ folgt, stimmen nur Verzeichnisse und Unterverzeichnisse überein.
Also durch Ausführen von
shopt -s globstarSie aktivieren die Funktion und BashsglobstarOption, die**/*phpmacht Erweitern auf alle.phpDateien im aktuellen Verzeichnis (**stimmt mit 0 oder mehr Verzeichnissen überein, also**/*phpstimmt mit./foo.phpüberein auch), die dann nachstringgegrepped werden .