
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
)。
答え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
を入力します。lL
プロンプトに従って入力します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例えば。