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.