Быстрый поиск строк в тысячах текстовых файлов в Linux

Недавно я преобразовал ~ 30 ГБ старых PST-файлов Outlook в текстовые файлы с помощью инструмента readpst .

Инструмент создает новый каталог для каждой ветки электронной почты, внутри которого размещает текстовый файл (для текста, связанного с веткой) и любые вложения.

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

Я работаю на Linux и мне удобно использовать командную строку. Я бы предпочел хранить данные в автономном режиме, а не загружать их в онлайн-инструмент. У меня нет доступа к экземпляру Outlook, поэтому я не могу просто загрузить исходные файлы .pst.

Наконец, любой рекомендуемый инструмент должен быть открытым/бесплатным.

Не могли бы вы преобразовать файлы PST в формат mbox ? Затем вы можете импортировать их в свою учетную запись IMAP (если она у вас есть), где сервер IMAP должен их индексировать и, таким образом, иметь возможность искать их с помощью почтового клиента. Просто сырая идея, не проверенная.
Вот мысль. Если вы замените жесткий диск на SSD, вы получите увеличение скорости в 5 раз для любого решения. Сколько ядер и какая скорость у вашего процессора?

Ответы (4)

Я использую программу для Windows под названием Everything с сайта voidtools.com. Это не то, что вам нужно (это только для Windows и только имена папок и файлов), но это быстро и гибко, поэтому я использовал его в качестве отправной точки, чтобы посмотреть, что еще доступно. Поиск на сайте www.alternativeto.net по запросу Everything для Linux дает всего 5 совпадений. Искать на Alternativeto.net

Из них все 5 с открытым исходным кодом. 3 также претендуют на поиск содержимого: Regain, SearchMonkey и Tracker. Четвертый, Catfish, неясно, ищет ли он контент; это описывается как интерфейс поиска.

Редактировать: я считаю, что ссылка на сайт восстановления на сайте alterto.net устарела. Тот, который я нашел, который работает, это: Восстановить веб-сайт . Обратите внимание, что это кросс-платформа. Утверждается, что он очень быстрый, потому что использует индекс. В Windows он должен быть установлен. Не знаю насчёт линукса.

Ссылка на веб-сайт SearchMonkey: Веб- сайт SearchMonkey Он также является кросс-платформенным. Не требует установки в Windows. Похоже, он не использует индекс, поэтому может быть не быстрее, чем grep.

Я не использовал Regain, но попробовал SearchMonkey. Кажется, все в порядке. Опять же, в Windows.

Edit2 (19.01.16): я заново открыл для себя другую программу, которую я ранее загрузил, DocFetcher. Я провел несколько тестов на нем под Windows, и я считаю, что он делает то, что вы хотите. Это бесплатно, с открытым исходным кодом и кроссплатформенно. Он будет искать внутри файлов и отображать соответствующий простой текст. Он поддерживает несколько типов файлов, включая Outlook PST. Он создаст индекс с пользовательским контролем над индексируемым путем, поэтому вы можете индексировать только свой файл pst. Индексация может занять некоторое время, но тогда она будет достаточно быстрой. Ему нужна Ява. Он доступен по адресу: DocFetcher на Sourceforge . Его веб-сайт, также на Sourceforge, находится на веб-сайте DocFetcher . Комментарии на Sourceforge, как правило, очень положительные.

VoidTools Everything ищет по имени файла, а не по его содержимому. Ответ, кажется, является результатом поиска Google, что обескураживает. У вас практически нет опыта работы с рекомендуемыми вами программами, что также не рекомендуется.
@Thomas - я явно и правильно определил все как Windows и поиск только по имени файла / папки. Я прямо и ясно указал, что использовал Alternativeto.net для поиска. Я определил программы, которые могут удовлетворить потребности ОП. Я их не "рекомендовал". Пока что мой ответ, каким бы неадекватным он вам ни казался, является единственным. ОП, безусловно, может попробовать эти программы и прокомментировать.
Я не понимаю концепцию этого подхода: вы знаете программу, которая может искать имена файлов , затем искать альтернативы в Google и, надеюсь, вы найдете программы, которые ищут содержимое файлов ? Почему бы не начать с программы, которая ищет содержимое файлов и альтернативы этому? Этот сайт посвящен программным «рекомендациям», так почему бы вам не порекомендовать что-нибудь?
DocFetcher выглядит многообещающе — посмотрю. Если он делает то, что говорит, я приму это как лучший ответ.
Search Monkey был моей первой мыслью, также я думаю, что он не создает индекс. Для Windows рабочий стол Copernicus был лучшим (и действительно создает индекс), хотя я предпочитаю Agent Ransack

Поскольку вы работаете в Linux и уже используете grep/find, давайте направим их в xargs и воспользуемся параметром параллелизма, чтобы ускорить процесс. Это будет зависеть от того, сколько вычислений у вас есть на вашем компьютере, но должно быть быстрее. Например, вы, вероятно, делаете что-то похожее на:

grep -i "<string>" /dir/path

Передайте команду xargs и используйте, -nчтобы указать, сколько одновременных процессов вы хотите запустить (4 здесь просто пример, может быть 2 или может быть 200):

grep -i "<string>" /dir/path | xargs -n 4

Это ускорит ваши дела. Если вы не уверены, насколько это ускорит работу, вы можете сделать следующее и сравнить время выполнения:

time grep -i "<string>" /dir/path

time grep -i "<string>" /dir/path | xargs -n 4
Как это xargs -n 4работает?
@ wb9688 он запускает команду одновременно количество раз, указанное после -n, ​​поэтому в конечном итоге быстрее.
Спасибо за ответ. Я уже пробовал это предложение, но влияние было ограничено скрипучим старым оборудованием, на котором я его запускаю :)
Как насчет монтирования файлов в памяти и выполнения этого?
А как насчет того, чтобы запустить его на каком-нибудь другом, не столь уж старом оборудовании? :-)

У меня нет опыта преобразования PST-файлов Outlook, но если вы можете получить эти электронные письма в формате maildir, есть отличный инструмент под названием notmuch, который, похоже, делает именно то, что вы просите. Он проиндексирует вашу почту и позволит вам быстро искать ее. Существует несколько интерфейсов и клиентов, предназначенных для работы с ним. Читайте об этом здесь: NotMuchMail.org

Режим отдельного файла readpstдает по сути что-то близкое к Maildir. (Отсутствующие теги не должны быть проблемой, если ваша задача состоит в поиске.)

Поскольку у вас нормальная операционная система и вы не боитесь командной строки, можем ли мы предположить, что у вас есть навыки программирования?

Если да... Я имел обыкновение запускать румяный архив рассылки электронной почты по суперспецифическим темам. Периодически запускал задания, конвертируя почту mbox в maildir и файл для каждого сообщения, затем сканировал файлы, избавлялся от заголовков и сохранял индекс ключевых слов в базе данных mysql.

Вы можете сделать то же самое - отдельный файл для каждого сообщения готов, вам просто нужно написать код для 1) отслеживания идентификатора/местоположения потока сообщений, который вы обрабатываете, и 2) вставки всех слов в таблица базы данных идентификаторов ключевых слов/сообщений, использующая mysql, mariadb, mongo, все, что вам удобно.