4

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

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

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

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

4 ответа4

7

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

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

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

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

4

Вы также можете использовать grep без find:

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

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

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

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

ack -la <pattern> /var/www

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .