我想查找 IMAP 文件夹中包含特定文本的所有电子邮件(即:发送到特定电子邮件地址的邮件)。我已经发现我可以通过使用 grep 来做到这一点,如下所示:
grep -rnw '~/users/example' -e "[email protected]"
这将返回匹配的文本或文件名(带有-l
)。但我的任务真正需要的是知道找到的电子邮件文件的“标题”。
/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
因此,我以某种方式需要根据上面的 grep 查找文件,但列出的结果应该是同一文件的不同部分(也许使用正则表达式?)。
我该怎么办?
答案1
使用formail
(随 一起提供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 {} +
也就是说,对于每个电子邮件文件
- 提取
To
和Cc
标头 [email protected]
在那里寻找- 如果找到,则提取
Subject
标题并将其打印在一行上(带有-c
)。
答案2
文件的“标题”、路径或名称是什么?使用 --files-with-matches 选项或 -l 列出匹配的文件名。如果您仅搜索固定字符串而不是正则表达式,请使用 -F 加快该过程
grep -F -r -l [email protected] ~/users/example
要匹配文件的其他内容,grep 找到的文件列表(fgrep 与 grep -F 相同):
fgrep -rl [email protected] ~/users/example | xargs grep '^Subject:'
提示:许多命令在第一个参数处停止选项解析,而无需减号字符。所以所有选项都应该首先调用。
答案3
和mutt
:
muff -f ~/users/example/.Archives.2013
(假设这是一个 maildir 文件夹)。在 中mutt
,键入l(小写L
)。
根据Limit to messages matching:
提示输入:
~C [email protected]
(虽然严格来说,因为它是一个正则表达式,所以应该是~C 'my@example\.com'
字面.
匹配的)。
或者开始mutt
为:
mutt -f ~/users/example/.Archives.2013 -e 'push "l ~C [email protected]"'
~C
To:
在和标题中搜索Cc:
。
查看手册对于搜索语法。
要同时搜索多个邮箱,您可以使用多个邮件索引器(内部mutt
或外部)。看https://dev.mutt.org/trac/wiki/UseCases/SearchingMail例如。