Solución:
Tratar
find /srv/www/*/htdocs/system/application/ -name "*.php" -exec grep "debug (" {} ; -print
Esto debería buscar de forma recursiva las carpetas bajo application
para archivos con .php
extensión y pasarlos a grep
.
Una optimización sobre esto sería ejecutar:
find /srv/www/*/htdocs/system/application/ -name "*.php" -print0 | xargs -0 grep -H "debug ("
Esto usa xargs
pasar todo el .php
archivos de salida por find
como argumentos a un solo grep
mando; p.ej, grep "debug (" file1 file2 file3
. los -print0
opción de find
y -0
opción de xargs
asegúrese de que los espacios en los nombres de archivos y directorios se manejen correctamente. los -H
opción pasada a grep
asegura que el nombre del archivo se imprima en todas las situaciones. (Por defecto, grep
imprime el nombre del archivo solo cuando se pasan varios argumentos).
De man xargs:
-0
Los elementos de entrada terminan con un carácter nulo en lugar de un espacio en blanco, y las comillas y la barra invertida no son especiales (cada carácter se toma literalmente). Desactiva el final de la cadena del archivo, que se trata como cualquier otro argumento. Útil cuando los elementos de entrada pueden contener espacios en blanco, comillas o barras diagonales inversas. El hallazgo de GNU
-print0
La opción produce una entrada adecuada para este modo.
find
ni siquiera es necesario para este ejemplo, se puede utilizar grep
directamente (al menos GNU grep
):
grep -RH --include="*.php" "debug (" /srv/www/*/htdocs/system/application/
y nos quedamos con una única bifurcación de proceso.
Opciones:
-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.