J'essaie de faire une recherche de texte dans certains fichiers qui partagent une structure de répertoires similaire, mais qui ne sont pas dans la même arborescence de répertoires, sous GNU / Linux.
J'ai un serveur web avec de nombreux sites qui partagent la même arborescence (framework PHP Code Igniter MVC), donc je veux rechercher dans un répertoire spécifique dans l'arborescence de chaque site, par exemple:
/srv/www/*/htdocs/system/application/
Où * est le nom du site. Et à partir de ces répertoires d' application , je veux rechercher dans tout l'arborescence jusqu'à ses feuilles, un fichier * .php qui contient un modèle de texte, disons "debug (", aucune expression régulière nécessaire.
Je sais utiliser find et grep mais je ne suis pas bon pour les combiner.
Comment pourrais-je faire ça?
Merci d'avance!
find /srv/www/*/htdocs/system/application/ -name "*.php" -print0 | xargs -0 grep "debug ("
GNU find
peut prendre l'+
opérateur au lieu d'\;
effectuer le même type d'exécution de processus unique que lexargs
font. Ainsi,find /srv/www/*/htdocs/system/application/ -name "*.php" -exec grep -H "debug (" {} +
fait la même chose que l'xargs
exemple dans cette réponse, mais avec un fork de processus en moins (et toujours 0 risque de problèmes de nom de fichier).find
n'est même pas nécessaire pour cet exemple, on peut utilisergrep
directement (au moinsGNU grep
):et nous en sommes à une seule fourche de processus.
Options:
-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.
la source
-RH
signifient les options?man grep
extrait des descriptions des options au message.Votre shell peut trouver les fichiers php et les donner à grep. En bash:
la source