Essayez
find /srv/www/*/htdocs/system/application/ -name "*.php" -exec grep "debug (" {} \; -print
Cela devrait rechercher de manière récursive les dossiers sous application
pour les fichiers avec .php
extension et transmettez-les à grep
.
Une optimisation sur ce serait d'exécuter :
find /srv/www/*/htdocs/system/application/ -name "*.php" -print0 | xargs -0 grep -H "debug ("
Cela utilise xargs
passer tous les .php
fichiers générés par find
comme arguments d'un seul grep
commande ; par exemple, grep "debug (" file1 file2 file3
. Le -print0
possibilité de find
et -0
possibilité de xargs
assurez-vous que les espaces dans les noms de fichiers et de répertoires sont correctement gérés. Le -H
option passée à grep
garantit que le nom de fichier est imprimé dans toutes les situations. (Par défaut, grep
affiche le nom du fichier uniquement lorsque plusieurs arguments sont passés.)
De man xargs :
-0
Les éléments d'entrée se terminent par un caractère nul au lieu d'un espace blanc, et les guillemets et l'anti-sla ne sont pas spéciaux (chaque caractère est pris littéralement). Désactive la chaîne de fin de fichier, qui est traitée comme n'importe quel autre argument. Utile lorsque les éléments d'entrée peuvent contenir des espaces blancs, des guillemets ou des barres obliques inverses. Le GNU trouve
-print0
L'option produit une entrée adaptée à ce mode.
find
n'est même pas nécessaire pour cet exemple, on peut utiliser grep
directement (au moins GNU grep
):
grep -RH --include='*.php' "debug (" /srv/www/*/htdocs/system/application/
et nous n'avons plus qu'un seul processus.
Choix :
-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.