我有一台 Kerio Connect 邮件服务器,它将所有电子邮件以原始 .eml 文件的形式保存在相对标准的邮件池文件夹结构中。我的任务是针对某些用户的邮箱执行关键字搜索,以查找关键字和电子邮件地址。然后我需要将找到的文件复制到另一个文件夹。
文件夹结构如下:
mail
example.com
user1
INBOX
Sent Items
etc
user2
INBOX
etc
困难在于,作为 .eml 文件的电子邮件在每个文件夹中都以序列号命名 - 因此,如果我在 user1 的收件箱中找到一封名为 00000123.eml 的电子邮件,并且他们的已发送邮件中另一封同名电子邮件包含其中一个关键字,我不希望将其中一封复制覆盖在另一封之上。
我还需要执行一些不区分大小写的关键字搜索,以便我可以搜索“关键字”并使其与关键字、关键字和关键字匹配。
我认为以下命令将执行我想要的操作,但我不是 100% 确定,并且我正在对大约 100 GB 的 eml 文件运行该命令,因此我想确保在运行它之前一切正确。
grep -i -r -l -e "[email protected]|[email protected]|keyword1|anotherkeyword|evenmore" /usr/local/kerio/mailserver/store/mail/example.com/user1/ | xargs -I{} rsync -Rv {} /Volumes/Data/Email\ Discovery/201706/user1/
据我计算,这将执行不区分大小写的搜索(-i)递归(-r)仅打印文件名(-l)并使用正则表达式(-e),然后将结果传递给 rsync,它将递归地将它们复制到目标文件夹并(希望)保持相同的文件夹结构。
有没有更有效的方法来做到这一点?