Extraindo a data da última mensagem de um arquivo mbox

5

Como eu poderia extrair o cabeçalho "Data:" da última mensagem recebida em um arquivo mbox?

Note que não é simplesmente uma questão de greping para a última ocorrência de "^ Date:", já que pode ser a data de uma resposta citada, não a última mensagem recebida.

Então, provavelmente, alguma análise adequada teria que estar envolvida.

o grepmail parece ser bom em mexer com os mboxes de forma inteligente, no entanto não consigo encontrar uma maneira de conseguir essa tarefa aparentemente trivial com ele.

Alguma entrada?

Obrigado.

E: Ok, eu sou oficialmente grosso. É provável que o ls -l mbox funcione. Então ai.

Ainda assim, eu estaria muito interessado em uma abordagem mais criativa.

    
por Wonderful Me 28.05.2015 / 14:43

3 respostas

1

grepmail -hH ^Date: /path/folder | grep ^Date: | tail -1

grepmail -hH ^Date: /path/folder : -h exige que a correspondência esteja no cabeçalho, -H imprime somente os cabeçalhos de correspondência de e-mails (ou seja, todos eles) ...

| grep ^Date: : a partir desses cabeçalhos, extraia apenas as Date: linhas ...

| tail -1 : e imprima apenas o último deles.

    
por 18.08.2015 / 09:05
1

Já que você precisa de algo que entenda o formato mbox real, o cliente de e-mail canônico mail ou a substituição mais comum usual mailx vem à mente.

mailx  -f /path/to/mbox -H 

Como são adicionadas novas mensagens, você deve listar suas mensagens em ordem de recepção.

    
por 16.08.2015 / 15:48
1

Como ponto de partida, você pode fazer algo assim para encontrar a linha From no início do último e-mail.

tac "$MAIL" | grep -m1 '^From '

Uma linha que começa com From indica o ponto inicial de um email no arquivo mbox. Ele também contém a hora em que foi recebido, o que geralmente é mais confiável do que qualquer outro timestamp encontrado nos cabeçalhos de correio.

Se você deseja especificamente um cabeçalho Date e não a linha From , pode fazer algo assim:

tac "$MAIL" | awk '/^Date: / {print} ; /^From / {exit}' | tail -1

Isso imprimirá a primeira linha começando com Date: no último email. No entanto, se os cabeçalhos do último email não tiverem Date header, ele ainda poderá estar correspondendo ao conteúdo em vez de ao cabeçalho, portanto, você precisará garantir que o email realmente tenha um Date header.

    
por 16.08.2015 / 16:05