Encuentre archivos que contengan texto, pero informe una parte diferente como resultado

Encuentre archivos que contengan texto, pero informe una parte diferente como resultado

Quiero encontrar todos los correos electrónicos en mis carpetas IMAP que contienen un texto determinado (es decir, que se envían a una dirección de correo electrónico determinada). Ya descubrí que puedo hacerlo usando grep de esta manera:

grep -rnw '~/users/example' -e "[email protected]"

Esto devuelve el texto coincidente o el nombre del archivo (con -l). Pero lo que realmente necesito para mi tarea es saber el "Título" del archivo de correo electrónico que se encontró.

/home/example/users/example/.Archives.2013/cur/1364614080.4080.example.com:2,Sa
/home/example/users/example/.Archives.2013/cur/1385591317.91317.example.com:2,RSa
/home/example/users/example/.Archives.2013/cur/1358235054.35054.example.com:2,S
/home/example/users/example/.Archives.2013/cur/1358445545.45545.example.com:2,S
/home/example/users/example/.Archives.2013/cur/1453119248.M330746P8611.example.com,S=6761,W=6915:2,S

Entonces, de alguna manera necesito encontrar los archivos basados ​​en el grep anterior, pero el resultado que aparece debería ser una parte diferente de ese mismo archivo (¿tal vez con expresiones regulares?).

¿Cómo puedo hacer esto?

Respuesta1

Usando formail(enviado con procmail):

find ~/users/example -type f -exec sh -c '
  for email do
    formail -x to -x cc < "$email" |
      grep -qF [email protected] &&
      formail -cx subject < "$email"
  done' sh {} +

Es decir, para cada archivo de correo electrónico

  • extraer los encabezados ToyCc
  • busca [email protected]ahí dentro
  • si lo encuentra, extraiga el Subjectencabezado e imprímalo en una línea (con -c).

Respuesta2

¿Qué es el "Título" de un archivo, la ruta o el nombre? Utilice la opción --files-with-matches o -l para enumerar los nombres de archivos coincidentes. Si busca solo cadenas fijas en lugar de expresiones regulares, acelere el proceso con -F

grep -F -r -l [email protected] ~/users/example

Haga coincidir otro contenido del archivo, grep la lista de archivos encontrados (fgrep es lo mismo que grep -F):

fgrep -rl [email protected] ~/users/example | xargs grep '^Subject:'

Sugerencia: muchos comandos detiene el análisis de opciones en el primer argumento sin carácter menos. Por lo tanto, todas las opciones deben llamarse primero.

Respuesta3

Con mutt:

muff -f ~/users/example/.Archives.2013

(suponiendo que sea una carpeta maildir). Y dentro mutt, escribe l(minúscula L).

Cuando Limit to messages matching:se le solicite, ingrese:

~C [email protected]

(aunque estrictamente hablando, como es una expresión regular, debería ~C 'my@example\.com'coincidir .literalmente).

O empezar muttcomo:

mutt -f ~/users/example/.Archives.2013 -e 'push "l ~C [email protected]"'

~Cbusca en los encabezados To:y Cc:.

Controlarel manualpara la sintaxis de búsqueda.

Para buscar en más de un buzón a la vez, existen varios indexadores de correo que puede utilizar (dentro mutto no). Verhttps://dev.mutt.org/trac/wiki/UseCases/SearchingMailpor ejemplo.

información relacionada