Я пытаюсь выполнить текстовый поиск в некоторых файлах, которые имеют похожую структуру каталогов, но не находятся в одном дереве каталогов, в GNU / Linux.
У меня есть веб-сервер со многими сайтами, которые имеют одинаковую древовидную структуру (PHP Code Framework Igniter MVC), поэтому я хочу искать в определенном каталоге по дереву для каждого сайта, например:
/srv/www/*/htdocs/system/application/
Где * это название сайта. И из этих каталогов приложений я хочу найти все дерево вплоть до его листьев, чтобы найти файл * .php, в котором есть какой-то текстовый шаблон, скажем, «debug (», регулярное выражение не требуется).
Я знаю, как использовать find и grep, но я не очень хорошо их комбинирую.
Как бы я это сделал?
Заранее спасибо!
find /srv/www/*/htdocs/system/application/ -name "*.php" -print0 | xargs -0 grep "debug ("
GNU find
может взять на себя+
оператор вместо того,\;
чтобы выполнять тот же вид одиночного выполнения процесса, чтоxargs
и. Таким образом,find /srv/www/*/htdocs/system/application/ -name "*.php" -exec grep -H "debug (" {} +
делает то же самое, что и вxargs
примере в этом ответе, но с одним меньшим разветвлением процесса (и все еще 0 риска для проблем с именами файлов).find
даже не требуется для этого примера, можно использоватьgrep
напрямую (по крайней мереGNU grep
):и мы дошли до единого процесса.
Параметры:
-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.
источник
-RH
означают варианты?man grep
отрывок описания опций в пост.Ваша оболочка может найти файлы php и передать их grep. В Баш:
источник