Versuchen Sie es
find /srv/www/*/htdocs/system/application/ -name "*.php" -exec grep "debug (" {} \; -print
Dies sollte die Ordner unter application rekursiv durchsuchen für Dateien mit .php Erweiterung und übergeben Sie sie an grep .
Eine Optimierung hierfür wäre die Ausführung von:
find /srv/www/*/htdocs/system/application/ -name "*.php" -print0 | xargs -0 grep -H "debug ("
Dies verwendet xargs um alle .php zu bestehen Dateien, die von find ausgegeben werden als Argumente für einen einzelnen grep Befehl; z. B. grep "debug (" file1 file2 file3 . Die -print0 Option von find und -0 Option von xargs Stellen Sie sicher, dass die Leerzeichen in Datei- und Verzeichnisnamen korrekt behandelt werden. Die -H Option übergeben an grep stellt sicher, dass der Dateiname in allen Situationen gedruckt wird. (Standardmäßig grep gibt den Dateinamen nur aus, wenn mehrere Argumente übergeben werden.)
Von man xargs:
-0
- Eingabeobjekte werden mit einem Nullzeichen anstelle von Leerzeichen abgeschlossen, und die Anführungszeichen und der Backslashare sind nichts Besonderes (jedes Zeichen wird wörtlich genommen). Deaktiviert das Ende der Dateizeichenfolge, das wie jedes andere Argument behandelt wird. Nützlich, wenn Eingabeelemente Leerzeichen, Anführungszeichen oder umgekehrte Schrägstriche enthalten können. Das GNU findet
-print0 Option erzeugt Eingaben, die für diesen Modus geeignet sind.
find wird für dieses Beispiel nicht einmal benötigt, man kann grep verwenden direkt (mindestens GNU grep ):
grep -RH --include='*.php' "debug (" /srv/www/*/htdocs/system/application/
und wir haben nur noch einen einzigen Prozesszweig.
Optionen:
-R, --dereference-recursive Read all files under each directory, recursively. Follow all symbolic links, unlike -r.-H, --with-filename Print the file name for each match. This is the default when there is more than one file to search.--include=GLOB Search only files whose base name matches GLOB (using wildcard matching as described under --exclude).--exclude=GLOB Skip any command-line file with a name suffix that matches the pattern GLOB, using wildcard matching; a name suffix is either the whole name, or any suffix starting after a / and before a +non-/. When searching recursively, skip any subfile whose base name matches GLOB; the base name is the part after the last /. A pattern can use *, ?, and [...] as wildcards, and \ to quote a wildcard or backslash character literally.