Рекурсивный поиск регистрирует, которые содержат некоторый определенный текст

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

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

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

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

4
задан 18.01.2011, 17:19

4 ответа

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

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

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

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

7
ответ дан 07.12.2019, 19:16

Можно также использовать grep один без находки:

grep -Rli 'old string' /var/www > list_of_files
4
ответ дан 07.12.2019, 19:16

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

find /var/www -type f -print0 | xargs -0 grep -li 'old string'
1
ответ дан 07.12.2019, 19:16

Попробуйте ack - это быстрее, чем grep и поддерживает жемчуг regex.

ack -la <pattern> /var/www

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

0
ответ дан 07.12.2019, 19:16

Теги

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