
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
ヘッダーを抽出し、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
、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/メールの検索例えば。