私のメールは/ var/mail/fileに保存されています。メールファイルの各メッセージのループ
各メッセージをループするbashスクリプトを作成したいと思います。 メッセージをファイルから分割する方法がわかりません。
おかげ
私のメールは/ var/mail/fileに保存されています。メールファイルの各メッセージのループ
各メッセージをループするbashスクリプトを作成したいと思います。 メッセージをファイルから分割する方法がわかりません。
おかげ
編集:「あなたが持っているすべてのハンマーがある場合は、すべてが爪のように見える」の典型的なケース。 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
ためgrep
、head
とtail
-0
用xargs
bash
から直接反復処理する場合は、eas私は、while read
ループのread
の-d
オプションを使用して、NULのセパレータとしての使用を指定します。
より永続的な解決策として、既存のmbox
パーサーの使用方法を見つける必要があります。
私はこれがいくつかのメールでは失敗すると思います。改行の後に 'From'が続くメール本文では、2つの間の区切りとみなされますメール。これは避けることができますが(ヘッダーはEOLで終了しますが、メールの本文にEOLが見つからないと思うのですが)、この種のコーナーケースに対しては本格的なパーサを使用するのがおそらく最適です確かにいくつか抜けている。 – Aaron
これは学習の練習ですか?なぜこのアプローチを取るのですか? – MattH
ファイルが大きすぎてpopa3dが私にエラーを与えるので – Bob5421
ファイルを分割する方法が明確でない –