Ich versuche, eine Textsuche in einigen Dateien durchzuführen, die eine ähnliche Verzeichnisstruktur haben, sich jedoch nicht in derselben Verzeichnisstruktur in GNU / Linux befinden.
Ich habe einen Webserver mit vielen Sites, die dieselbe Baumstruktur haben (Code Igniter MVC PHP Framework). Daher möchte ich für jede Site in einem bestimmten Verzeichnis im Baum suchen. Beispiel:
/srv/www/*/htdocs/system/application/
Wobei * der Site-Name ist. Und in diesen Anwendungsverzeichnissen möchte ich den gesamten Baum bis auf die Blätter durchsuchen und nach einer * .php-Datei suchen, die ein Textmuster enthält. Sagen wir "debug (", kein regulärer Ausdruck erforderlich.
Ich weiß, wie man find und grep benutzt, aber ich kann sie nicht gut kombinieren.
Wie würde ich das machen?
Danke im Voraus!
find /srv/www/*/htdocs/system/application/ -name "*.php" -print0 | xargs -0 grep "debug ("
GNU find
kann jedoch den+
Operator\;
erfordern, anstatt die gleiche Art der Einzelprozessausführung auszuführen, wie dies der Fall istxargs
. Sofind /srv/www/*/htdocs/system/application/ -name "*.php" -exec grep -H "debug (" {} +
macht das gleiche wie dasxargs
Beispiel in dieser Antwort, aber mit einer weniger Prozess Gabel (und immer noch 0 Risiko für Namen Probleme Datei).find
wird für dieses Beispiel nicht einmal benötigt, man kanngrep
direkt (zumindestGNU grep
) verwenden:und wir sind auf eine einzelne Prozessgabel zurückzuführen.
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.
quelle
-RH
Optionen nur aus Neugier ?man grep
Auszug der Optionsbeschreibungen zum Beitrag hinzugefügt .Ihre Shell kann die PHP-Dateien finden und an grep übergeben. In der Bash:
quelle