Búsqueda rápida de cadenas en miles de archivos de texto en Linux

Recientemente convertí ~30 GB de archivos .pst antiguos de Outlook en archivos de texto usando la herramienta readpst .

La herramienta crea un nuevo directorio para cada hilo de correo electrónico, dentro del cual coloca un archivo de texto (para el texto asociado con el hilo) y cualquier archivo adjunto.

Esto me ha permitido encontrar archivos adjuntos rápidamente, pero ahora me gustaría poder buscar rápidamente las muchas decenas de miles de archivos de texto (es decir, hilos de correo electrónico) para cadenas de varias longitudes. Usar findy grepes demasiado lento, por lo que presumiblemente estoy buscando una forma de indexar los archivos primero.

Estoy basado en Linux y me siento cómodo usando la línea de comandos. Preferiría mantener los datos fuera de línea, en lugar de cargarlos en una herramienta en línea. No tengo acceso a una instancia de Outlook, así que no puedo simplemente cargar los archivos .pst originales.

Finalmente, cualquier herramienta recomendada debe ser de código abierto/gratis.

¿Sería una opción para usted convertir los archivos PST a formato mbox ? Luego podría importarlos a su cuenta IMAP (si la tiene), donde el servidor IMAP debería indexarlos y, por lo tanto, poder buscarlos usando su cliente de correo. Solo una idea cruda, no probada.
Aquí hay un pensamiento. Si cambia su disco duro por un SSD, obtendrá un aumento de velocidad de 5x+ para cualquier solución. ¿Cuántos núcleos y qué velocidad es su CPU?

Respuestas (4)

Uso un programa de Windows llamado Everything, de voidtools.com. No es lo que desea (es solo Windows, y solo nombres de carpetas y archivos), pero es rápido y flexible, así que lo usé como punto de partida para ver qué más estaba disponible. Una búsqueda en Alternativeto.net para Everything, para Linux, da 5 aciertos totales. Buscar en Alternativeto.net

De estos, los 5 son de código abierto. 3 afirman también buscar contenido: Regain, SearchMonkey y Tracker. Un cuarto, Catfish, no tiene claro si busca contenido; se describe como una interfaz de búsqueda.

Editar: creo que el enlace al sitio web de recuperación en alternativo.net está obsoleto. El que encontré que funciona es: Recuperar sitio web Tenga en cuenta que es multiplataforma. Se dice que es muy rápido porque usa un índice. En Windows, tiene que ser instalado. No sé sobre Linux.

El enlace al sitio web de SearchMonkey es: Sitio web de SearchMonkey También es multiplataforma. No requiere instalación en Windows. No parece usar un índice, por lo que puede que no sea más rápido que grep.

No he usado Regain, pero probé SearchMonkey. Parece bien. De nuevo, en Windows.

Edit2 (19/1/16): redescubrí otro programa que había descargado anteriormente, DocFetcher. Hice algunas pruebas en Windows y creo que hace lo que quieres. Es gratuito, de código abierto y multiplataforma. Buscará dentro de los archivos y mostrará el texto sin formato relevante. Admite múltiples tipos de archivos, incluido Outlook pst. Generará un índice, con el control del usuario de la ruta que se indexa, por lo que podría indexar solo su archivo pst. La indexación puede llevar algún tiempo, pero luego es bastante rápida. Necesita Java. Está disponible en: DocFetcher en Sourceforge Su sitio web, también en Sourceforge, está en DocFetcher website . Los comentarios sobre Sourceforge son generalmente muy positivos.

VoidTools Everything busca por nombre de archivo, no por contenido de archivo. La respuesta parece ser un resultado de búsqueda de Google, que se desaconseja. Tiene poca o ninguna experiencia con los programas que recomienda, lo cual tampoco se recomienda.
@Thomas: identifiqué explícita y correctamente Everything como Windows y búsqueda de nombres de archivos/carpetas solamente. Indiqué explícita y claramente que usé Alternativeto.net para hacer una búsqueda. Identifiqué programas que podrían satisfacer las necesidades del OP. No los "recomendé". Hasta ahora, mi respuesta, por inadecuada que le parezca, es la única proporcionada. El OP ciertamente puede probar estos programas y comentar.
No entiendo el concepto de este enfoque: ¿conoce un programa que puede buscar nombres de archivos , luego busca alternativas en Google y espera encontrar programas que busquen contenido de archivos ? ¿Por qué no comenzar con un programa que busque contenido de archivos y busque alternativas a eso? Este sitio trata sobre "recomendaciones" de software, entonces, ¿por qué no recomiendas algo?
DocFetcher parece prometedor. Le echaré un vistazo. Si hace lo que dice que hace, aceptaré esta como la mejor respuesta.
Search Monkey fue mi primer pensamiento, también creo que no crea un índice. Para Windows, el escritorio de Copernicus solía ser el mejor (y crea un índice), aunque prefiero Agent Ransack

Como estás en Linux y ya usas grep/find, canalicémoslos a xargs y usemos su opción de concurrencia para acelerar las cosas. Dependerá de la cantidad de cómputo que tenga en su máquina, pero debería ser más rápido. Por ejemplo, probablemente estés haciendo algo similar a:

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

Canalice el comando a xargs y use -npara indicar cuántos procesos simultáneos desea ejecutar (4 es solo un ejemplo aquí, podría ser 2 o podría ser 200):

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

Acelerará las cosas para ti. Si no está seguro de cuánto acelerará las cosas, puede hacer lo siguiente y comparar los tiempos de finalización:

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

time grep -i "<string>" /dir/path | xargs -n 4
¿Cómo funciona eso xargs -n 4?
@ wb9688 ejecuta el comando simultáneamente la cantidad de veces especificada después de -n, por lo que, en última instancia, es más rápido.
Gracias por la respuesta. Ya probé esta sugerencia, pero el impacto fue limitado por el hardware viejo y chirriante en el que lo estoy ejecutando :)
¿Qué hay de montar los archivos en la memoria y hacerlo?
¿Qué tal ejecutarlo en algún otro hardware no tan antiguo? :-)

No tengo ninguna experiencia en la conversión de archivos PST de Outlook, pero si puede obtener esos correos electrónicos en formato maildir, hay una herramienta excelente llamada notmuch que parece hacer exactamente lo que está pidiendo. Indexará su correo y le permitirá buscarlo rápidamente. Hay varios front-ends y clientes diseñados para trabajar con él también. Lea sobre esto aquí: NotMuchMail.org

El modo de archivo separado de readpstda esencialmente algo parecido a un Maildir. (Las etiquetas que faltan no deben ser un problema si su tarea es buscar).

Dado que tiene un sistema operativo adecuado y no le teme a la línea de comandos, ¿podemos suponer que también tiene algunas habilidades de codificación?

Si es así... Solía ​​​​ejecutar un archivo rojo de un servidor de listas de correo electrónico de temas súper específicos. Ejecutaría trabajos de vez en cuando convirtiendo mbox mail a maildir y un archivo para cada mensaje, luego escanearía los archivos, eliminaría los encabezados y almacenaría un índice de palabras clave en una base de datos mysql.

Puede hacer lo mismo: el archivo individual para cada mensaje está listo, solo necesita escribir el código para 1) realizar un seguimiento del identificador/ubicación del hilo del mensaje que está procesando y 2) insertar todas las palabras en una tabla de base de datos de ID de palabra clave/mensaje usando mysql, mariadb, mongo, lo que sea con lo que te sientas cómodo.