テキストを含むファイルを見つけ、そのファイルの一意の部分を結果として報告します。

テキストを含むファイルを見つけ、そのファイルの一意の部分を結果として報告します。

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 {} +

つまり、各メールファイルについて

  • 抽出ToCcヘッダ
  • [email protected]そこで検索してみてください
  • 見つかったらSubject、タイトルを抽出して1行に印刷します(-c)。

おすすめ記事