
我想查找 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例如。