Linux + находит слово/строку в файле в соответствии с каталогом

У меня есть следующая команда

find /var -type f -exec grep "param1" {} \; -print

С этой командой я могу найти строку param1 в любом файле под / var, но время, когда это берет для этого, очень длинно.

Мне нужна другая возможность к строке поиска в файле, но намного больше быстрее затем мой пример

4
задан 03.06.2010, 16:58

5 ответов

Вы могли попытаться использовать grep непосредственно в качестве в

grep -R "param1" /var/*
5
ответ дан 07.12.2019, 19:57

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

я сомневаюсь, что Вы хотите пойти тем путем, но только дать Вам другую опцию :)

1
ответ дан 07.12.2019, 19:57

Существует пара факторов на работе здесь:

Во-первых, при помощи -exec, находка порождает новый процесс для grep для каждого файла это находит.

Этим можно управлять любой при помощи xargs как в ответе Felipe Alvarez (я записал сообщение в блоге об этом 5 + несколько лет назад), или при помощи -exec grep param1 {} + (отметьте + вместо \;). При использовании +, "командная строка создается путем добавления каждого выбранного имени файла в конце; общее количество вызовов команды будет намного меньше, чем количество подобранных файлов" (из страницы справочника находки)

Во-вторых, число и размер файлов под /var является потенциально очень большим.

Можно ли добавить параметры в дополнение к -type f для ограничения файлов, Вы ищете. find имеет опции ограничить ко времени, владельцу, шаблону имени, и т.д. Например, Вы могли сделать:

find /var -type f -name "access*log" -mtime -7 -exec grep param1 {} +

Это найдет файлы измененными за прошлые семь дней с именами, запускающимися с "доступа" и заканчивающимися "журналом". Только те, которые соответствуют файлам, будут частью exec/grep.

1
ответ дан 07.12.2019, 19:57

найдите... [вздор].....-print0 | xargs-0 grep-e "regex"

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

Я советую для использования:

grep -RInis "param1" /var

Для получения дополнительной информации посмотрите

man grep

Если скорость имеет такое значение, Вы могли бы хотеть рассмотреть fgrep, который не мог бы оказаться быстрее в зависимости от реализации.

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

Теги

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