Вопрос: Рекурсивный поиск файлов, содержащих определенный текст


Как я могу рекурсивно генерировать текстовый файл со списком всех файлов на моем сервере, которые содержат определенную строку в любом месте файлов?

Я знаю, что следующая команда может использоваться для замены строки рекурсивно

find /var/www -type f -print0 | xargs -0 sed -i 's/old string/new string/g'

Я не хочу заменять строку, мне просто нужен список всех файлов, содержащих строку.


4
2018-01-18 14:31


Источник


Для пользователя Windows я бы предложил написать пакетный файл, который сохраняет вывод в файл и помещает его в планировщик. Попробуйте все, что является заменой linux для этого процесса - Shekhar


Ответы:


использование grep вместо sed:

find /var/www -type f -print0 | xargs -0 grep -i 'old string'

Из того, как вы формулируете этот вопрос, кажется, что вы еще не слишком знакомы с grep, Узнайте больше о его параметрах в своем типе справочной страницы: man grep в командной строке.

обновить ответ - попробуйте добавить -l чтобы показывать только имена файлов. -i делает регистр поиска нечувствительным. Простые в использовании оба - с одной тире: grep -il


7
2018-01-18 14:38



Это, похоже, не дает мне только пути / файлы, содержащие строку, которую я ищу. По какой-то причине я также получаю текст из найденных файлов. - oshirowanen
Добавлен бит о -l - Doug Harris


Вы также можете использовать grep самостоятельно, не найдя:

grep -Rli 'old string' /var/www > list_of_files

4
2018-01-18 15:14





Вы можете попробовать добавить флаг -l в команду только для отображения имен файлов

find /var/www -type f -print0 | xargs -0 grep -li 'old string'

1
2018-01-18 14:55





Попробуйте ack - он быстрее grep и поддерживает регулярное выражение perl.

ack -la <pattern> /var/www

В некоторых системах этот пакет называется «ack», а иногда его называют «ack-grep».


0
2018-03-04 05:10