我有一个邮件服务器(运行 Exim 作为 MTA/MDA,Dovecot 用于 IMAP 访问),大约有 50 个用户,总数据量大约为 100GB(包括一些大账户、一些已停用的账户等)。所有邮件都存储在 Maildirs 中。我们突然需要提取所有邮件头(收件人、发件人、抄送等)包含少数几个域之一的邮件,以满足我们律师的要求。
现在,我可以想出一个低效的解决方案(通过相关域的邮件存档 grep -R,进行一点 cut、sort 和 uniq 来获取不同的文件名,将所有这些文件复制到新的 Maildir 并从那里获取,也许),但这在可用的硬件上运行将需要很长时间。有没有一种工具可以帮我减轻这个过程的痛苦?
平台并不是一个大问题 - 有问题的服务器运行的是 Ubuntu 12.04,但是我有一个足够新的数据快照,可以安装在运行任何合理系统的机器上 - 并且没有要求解决方案是 FOSS,尽管指示性软件预算是数百英镑而不是数千英镑。
我怀疑这个问题有一个非常明显的答案,但谷歌没有向我展示,可能是因为我的搜索词错误——有人有过这样的经历吗?
谢谢!
答案1
grep
确实是这个工作的工具:
grep -Rli "^to: .*@yourdomain" /your/maildir/ | sort | uniq -u
将产生一个唯一文件名的排序列表。
您没有从 .dotted 目录中获得结果的原因是“grep *”会扩展到所有不以点开头的文件和目录;这与 grep 无关。相反,将上层 maildir 目录的名称传递给 grep,让它执行文件搜索:grep -R /your/maildir/
编辑:并非所有 grep 二进制文件都编译了 -P,但在这种情况下您不需要它,因此我将其删除了。