私のローカルメール受信トレイをgrep

私のローカルメール受信トレイをgrep

cronジョブからローカルの受信トレイに送信された各Eメールを別のEメールに記録しようとしています。txt文書。ラインを使用するとき

mail | grep cron > cron_mail.txt

ジョブが停止せずに空きスペースが作成されます。cron_mail.txt

この問題をどのように解決できますか?それともbashでより簡単に解決する方法はありますか?

答え1

メールは標準エラーストリームとして出力されるように見えるため、標準出力のみがパイプされるため、grepにパイプされません。

努力するmail 2>&1 | grep cron > cron_mail.txt

2 は標準エラーストリームのファイル記述子です。上記のコマンドを使用すると、標準出力にリダイレクトされ、パイプされます。

答え2

ローカルメールバックエンドがBerkeleyメールボックスファイルの場合は、以下を試してください。

grep '^From cron  ' "$MAIL"

Fromこれは、Berkeley mboxファイルが各新しいメッセージの前に区切り線(送信者のエンベロープアドレス)で始まる行と2つのスペース(通常はメッセージの到着時間が続く)を使用するという事実に依存します。 (結果として、メッセージ本文には行のFrom先頭のどこにも5文字を含めることはできません。)cronたとえば、デーモンのメッセージにFQDNドメイン名が含まれている場合は、正規表現を調整する必要があります。

Berkeley mboxはかつてどこにも存在していましたが、今では多くのシステムが異なるメールボックス形式を使用しており、その多くは単一のフラットファイルではなくフォルダベースです。 maildir(特にIMAPメールボックスの一般的な形式)の場合は、以下を試してください。

find new cur tmp -type f -exec grep -m 1 '^From:' /dev/null | grep cron

各メッセージのヘッダーを確認しますFrom:(まったくメッセージヘッダーではなく、同様にマークされたBerkeley区切り文字とは異なります)。確認したいフォルダから実行するか、ディレクトリパラメータに、およびサブディレクトリへnewのフルパスを含めることができますcurtmp

関連情報