从 vmail 目录中获取所有发件人列表

从 vmail 目录中获取所有发件人列表

我正在尝试建立一个电子邮件列表。我想从电子邮件传入邮件目录 (vmail/..../cur) 获取电子邮件地址。我使用 dovecot,但我认为这没关系。有没有办法从包含约 30000 封电子邮件的 /cur 目录中获取所有发件人列表?

我努力了:

cat 1325153222.M840289P9721V0000000000000901I034001E2_2\,S\=2892\:2\, | grep 'From:' | awk '{ print $3 }'

输出:<[email protected]>

如果它能够在整个目录而不是仅在一个文件上运行,那就太好了。

答案1

评论太长了您的答案但你的策略有一些假设

find . -type f -exec cat {} + | grep 'From:' | awk '{ print $3 }' 

这是我接下来想谈的。


标题 From:通常采用以下形式

From: Sender Name or Description <[email protected]>  

在哪里最后的(并不一定是第三) 字段是括在 中的电子邮件地址< >。这意味着| awk '{ print $3 }'可能并不总是打印电子邮件地址。awk
中的 NF 参数包含字段数,通过使用 , | awk '{ print $NF }'您将始终让 awk 打印一行上的最后一个字段/列。

关于子命令grep 'From:'

我建议只匹配以下行的第一次出现开始使用From:正则表达式,因为这将是标题行,并且字符串“From:”的任何其他出现可能来自邮件正文。您也可以在第一次匹配后使用 停止-m,这对于大型邮件来说会更快一些。所以尝试grep -m 1 -e "^From:\ "

从样式的角度来看,您可以随时替换 cat FILENAME | grep STRINGgrep STRING FILENAME并简单地使用-rgrep 中的开关来递归解析 Maildir 中的所有文件。

grep -r -e "^From:\ " -m 1 . |awk '{print $NF}'

答案2

find . -type f -exec cat {} + | grep 'From:' | awk '{ print $3 }'

效果很好

相关内容