Estoy tratando de hacer una búsqueda de texto en algunos archivos que comparten una estructura de directorio similar, pero no están en el mismo árbol de directorios, en GNU / Linux.
Tengo un servidor web con muchos sitios que comparten la misma estructura de árbol (marco PHP Code Igniter MVC), por lo que quiero buscar en un directorio específico en el árbol para cada sitio, por ejemplo:
/srv/www/*/htdocs/system/application/
Donde * es el nombre del sitio. Y desde esos directorios de aplicaciones , quiero buscar en todo el árbol hasta sus hojas, en busca de un archivo * .php que tenga algún patrón de texto adentro, digamos "debug (", no se necesita una expresión regular.
Sé cómo usar find y grep pero no soy bueno para combinarlos.
¿Cómo haría esto?
¡Gracias por adelantado!
find /srv/www/*/htdocs/system/application/ -name "*.php" -print0 | xargs -0 grep "debug ("
GNU find
puede tomar el+
operador en lugar de\;
realizar el mismo tipo de ejecución de proceso único que loxargs
hace. Por lo tanto,find /srv/www/*/htdocs/system/application/ -name "*.php" -exec grep -H "debug (" {} +
hace lo mismo que elxargs
ejemplo en esta respuesta, pero con una bifurcación de proceso menos (y aún 0 riesgo de problemas de nombre de archivo).find
ni siquiera es necesario para este ejemplo, uno puede usargrep
directamente (al menosGNU grep
):y nos quedamos con un solo tenedor 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.
fuente
-RH
significan las opciones?man grep
Extracto agregado de descripciones de opciones a la publicación.Su shell puede encontrar los archivos php y dárselos a grep. En bash:
fuente