Prueba
find /srv/www/*/htdocs/system/application/ -name "*.php" -exec grep "debug (" {} \; -print
Esto debería buscar recursivamente las carpetas bajo application
para archivos con .php
extensión y pásalos a grep
.
Una optimización de esto sería ejecutar:
find /srv/www/*/htdocs/system/application/ -name "*.php" -print0 | xargs -0 grep -H "debug ("
Esto usa xargs
para pasar todos los .php
salida de archivos por find
como argumentos para un solo grep
comando; por ejemplo, grep "debug (" file1 file2 file3
. El -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. El -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 diagonal inversa no son especiales (cada carácter se toma literalmente). Deshabilita la cadena de fin de archivo, que se trata como cualquier otro argumento. Útil cuando los elementos de entrada pueden contener espacios en blanco, comillas o barras invertidas. El GNU encuentra
-print0
La opción produce una entrada adecuada para este modo.
find
ni siquiera es necesario para este ejemplo, uno puede usar grep
directamente (al menos GNU grep
):
grep -RH --include='*.php' "debug (" /srv/www/*/htdocs/system/application/
y estamos reducidos a una sola 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.