9

SOでこの質問を読みましたが、まったく役に立ちません。Gmail で生成された mbox ファイルを別の Web メール サービスにインポートしたいのですが、インポートごとに 40 MB の巨大なファイルしか許可されないという問題があります。

だから私はどういうわけかmboxファイルを最大に分割する必要があります. 40 MB の大きなファイルを次々とインポートします。これをどのように行いますか?

私が最初に考えたのは、他のスクリプト ( formail) を使用して各メールを 1 つのファイルとして保存し、後でスクリプトを実行してそれらを 40 MB の巨大なファイルに結合することでしたが、端末を使用してこれを行う方法はまだわかりません。

私もsplitコマンドを見ましたが、メールを遮断するのではないかと心配しています。助けてくれてありがとう!

4

4 に答える 4

13

標準形式の場合、各メッセージはスペースmboxで始まります。From

From someone@somewhere.com

したがって、メッセージごとに、メッセージの開始時にのみ分割して、それを処理するためにCOPY YOUR MBOX TO A TEMPORARY DIRECTORY使用することができます。awk出力ファイルごとに 1,000 メッセージを指定したとします。

awk 'BEGIN{chunk=0} /^From /{msgs++;if(msgs==1000){msgs=0;chunk++}}{print > "chunk_" chunk ".txt"}' mbox

次に、最大 1,000 のメッセージを含むそれぞれに呼び出さchunk_1.txtれる出力ファイルを取得します。chunk_n.txt

残念ながら Windows を使用している場合 (シングル クォーテーションを理解できない場合)、次の内容を次のファイルに保存する必要があります。awk.txt

BEGIN{chunk=0} /^From /{msgs++;if(msgs==1000){msgs=0;chunk++}}{print > "chunk_" chunk ".txt"}

次に入力します

awk -f awk.txt mbox
于 2015-01-23T14:07:41.917 に答える
0

私の最初の考えは、他のスクリプト (formail) を使用して各メールを単一のファイルとして保存し、その後スクリプトを実行してそれらを 40 MB の巨大なファイルに結合することでしたが、端末を使用してこれを行う方法はまだわかりません。

私が正しく理解している場合は、ファイルを分割してから、それらをインポートする前に大きなファイルに結合することをお勧めします。splitそれはとcatが意図していたことのように聞こえます。Split は、行単位またはバイト単位のサイズ指定に基づいてファイルを分割します。次に、これらのファイルに接尾辞を追加して順序を保ちます。次にcat、ファイルを元に戻すために使用します。

$ split -b40m -a5 mbox  # this makes mbox.aaaaa, mbox.aaab, etc.

他のシステムでファイルを取得したら:

$ cat mbox.* > mbox

各ファイルを一度に 1 つずつ新しいメール システムにインポートするため、メッセージがファイル間で分割されないようにファイルを分割したい場合は、これを行いません。

于 2015-01-23T14:56:33.567 に答える