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:string
Erklärung
Dadurch werden alle
.php
gefunden Dateien und führen Sie danngrep -H string
aus auf jedem von ihnen. Mitfind
ist-exec
Option,{}
wird durch jede der gefundenen Dateien ersetzt. Die-H
sagtgrep
um 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:string
Erklä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 globstar
Sie aktivieren die Funktion und Bashsglobstar
Option, die**/*php
macht Erweitern auf alle.php
Dateien im aktuellen Verzeichnis (**
stimmt mit 0 oder mehr Verzeichnissen überein, also**/*php
stimmt mit./foo.php
überein auch), die dann nachstring
gegrepped werden .