2017-05-12 8 views
0

私のメールは/ var/mail/fileに保存されています。メールファイルの各メッセージのループ

各メッセージをループするbashスクリプトを作成したいと思います。 メッセージをファイルから分割する方法がわかりません。

おかげ

+0

これは学習の練習ですか?なぜこのアプローチを取るのですか? – MattH

+0

ファイルが大きすぎてpopa3dが私にエラーを与えるので – Bob5421

+0

ファイルを分割する方法が明確でない –

答えて

0

編集:「あなたが持っているすべてのハンマーがある場合は、すべてが爪のように見える」の典型的なケース。 twalbergのように、procmailメール処理パッケージのformailを確認してください。

迅速かつ汚い何かについて、あなたは簡単にそれらを反復処理するだろうNULバイトのレコードを分離するために、以下を使用することができるはずです。

sed '/^\n/N;s/^From/\x0&/' /var/mail/targetMailbox 

たとえばあなたが、このコマンドとsplitを使用することができます扱いやすいサイズの複数のファイルにあなたのメールボックスを分割:

sed '/^\n/N;s/^From/\x0&/' /var/mail/targetMailbox | split -l 100 -t'\0' - /tmp/mailbox 

このコマンドは/tmp/で独自のファイルに書き込まれます100のメッセージのチャンクにメールボックスを分割します。ファイルを分割することに興味がある場合は、splitのオプションをチェックしてください。そうするにはさまざまな方法があります。

(?最近の)GNUツールの多くは、例えば、それらはNUL区切られたレコードを扱うようにする-0または-zオプションがあります:

  • -zためgrepheadtail
  • -0xargs

bashから直接反復処理する場合は、eas私は、while readループのread-dオプションを使用して、NULのセパレータとしての使用を指定します。

より永続的な解決策として、既存のmboxパーサーの使用方法を見つける必要があります。

+0

私はこれがいくつかのメールでは失敗すると思います。改行の後に 'From'が続くメール本文では、2つの間の区切りとみなされますメール。これは避けることができますが(ヘッダーはEOLで終了しますが、メールの本文にEOLが見つからないと思うのですが)、この種のコーナーケースに対しては本格的なパーサを使用するのがおそらく最適です確かにいくつか抜けている。 – Aaron