IMAPフォルダ内の特定のテキスト(たとえば、特定のEメールアドレスに送信されたメッセージ)を含むすべてのEメールを見つけたいです。私は次のように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
、タイトルを抽出して1行に印刷します(-c
)。