Как Объединиться, находят и grep для сложного поиска? (GNU/linux, найдите, grep),

Я пытаюсь сделать текстовый поиск в некоторых файлах, которые совместно используют подобную структуру каталогов, но не находятся в том же дереве каталогов в GNU/Linux.

У меня есть веб-сервер со многими сайтами, которые совместно используют ту же древовидную структуру (Воспламенитель кода платформа MVC PHP), таким образом, я хочу искать в определенном каталоге вниз дерево для каждого сайта, примера:

/srv/www/*/htdocs/system/application/

Где * название сайта. И от тех каталогов приложения, я хочу искать все дерево вниз на его листы для *.php файла, который имеет некоторый текстовый шаблон внутри, скажем, "отладка (", никакое необходимое регулярное выражение.

Я знаю, как использовать, находят и grep, но я не хорош в объединении их.

Как я сделал бы это?
Заранее спасибо!

17
задан 13.02.2010, 09:15

1 ответ

Попробовать

find /srv/www/*/htdocs/system/application/ -name "*.php" -exec grep "debug (" {} \; -print

Это должно рекурсивно искать папки под application для файлов с .php расширение и передает их grep.

Оптимизация на этом должна была бы выполниться:

find /srv/www/*/htdocs/system/application/ -name "*.php" -print0 | xargs -0 grep -H "debug ("

Это использует xargs передать весь .php файлы, произведенные find как аргументы синглу grep команда; например, grep "debug (" file1 file2 file3. -print0 опция find и -0 опция xargs гарантируйте пробелы в именах файлов, и имена каталогов правильно обрабатываются. -H опция передала grep гарантирует, что имя файла печатается во всех ситуациях. (По умолчанию, grep печатает имя файла только, когда несколько аргументов передаются в.)

От человека xargs:

-0

      Входные параметры завершаются нулевым символом вместо пробелом, и кавычки и обратная косая черта не являются особенными (каждый символ взят буквально). Отключает конец строки файла, которую рассматривают как любой другой аргумент. Полезный, когда входные параметры могли бы содержать пробел, метки кавычки или обратные косые черты. GNU находит -print0 опция производит вход, подходящий для этого режима.
20
ответ дан 07.12.2019, 10:37
  • 1
    +1. Это выполнит grep для каждого php файла, все же. Если существует много файлов, можно оптимизировать далее find /srv/www/*/htdocs/system/application/ -name "*.php" -print0 | xargs -0 grep "debug (" – Jukka Matilainen 24.09.2009, 16:45
  • 2
    @jackem. Я обновлю свой ответ соответственно. – nagul 24.09.2009, 17:38
  • 3
    Другое маленькое улучшение: xargs может просто передать одно имя файла grep, в этом случае grep не покажет имя файла, если будет соответствие. Можно хотеть добавить-H к команде grep, чтобы вынудить это показать имя файла. – Randy Orrison 24.09.2009, 17:54
  • 4
    @Randy Это - очень актуальный вопрос. – nagul 24.09.2009, 18:13

Теги

Похожие вопросы