У меня есть следующая команда
find /var -type f -exec grep "param1" {} \; -print
С этой командой я могу найти строку param1 в любом файле под / var, но время, когда это берет для этого, очень длинно.
Мне нужна другая возможность к строке поиска в файле, но намного больше быстрее затем мой пример
быстрый поиск главным образом достигается при наличии "индекса" содержания, своего рода "справочная таблица". существуют, существуют некоторые свободные поисковые системы, которые создают индекс входных файлов и дают Вам очень, очень быстро результаты:
я сомневаюсь, что Вы хотите пойти тем путем, но только дать Вам другую опцию :)
Существует пара факторов на работе здесь:
Во-первых, при помощи -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.
найдите... [вздор].....-print0 | xargs-0 grep-e "regex"