Linux 如何将每个邮件的邮箱拆分为单个文件?

Linux 如何将每个邮件的邮箱拆分为单个文件?,linux,bash,email,unix,mbox,Linux,Bash,Email,Unix,Mbox,我想通过bash命令将我的收件箱拆分为单独的文件(每封邮件一个文件),或者可能是Java中的简单程序。我怎么做 WBR,Thanx.只需使用formailformail是一个程序,可以处理邮箱,为邮箱中的每条邮件运行一些操作,分离邮件,等等 更多信息: 如果要将邮箱拆分为单独的文件, 我建议这样的解决办法: $ cat $MAIL | formail -ds sh -c 'cat > msg.$FILENO' 来自人类: FILENO 拆分时,formail会分配当前的邮件编号 正在输出

我想通过bash命令将我的收件箱拆分为单独的文件(每封邮件一个文件),或者可能是Java中的简单程序。我怎么做


WBR,Thanx.

只需使用
formail
formail
是一个程序,可以处理邮箱,为邮箱中的每条邮件运行一些操作,分离邮件,等等

更多信息:

如果要将邮箱拆分为单独的文件, 我建议这样的解决办法:

$ cat $MAIL | formail -ds sh -c 'cat > msg.$FILENO'
来自人类:

FILENO
拆分时,formail会分配当前的邮件编号
正在输出到此变量。通过预设FILENO,您可以
更改正在使用的初始消息编号和消息宽度
零填充输出。如果FILENO未设置,它将默认为000。
如果FILENO非空且不包含数字,则FILENO gen-
这是禁用的。

如果您没有formail,也可以使用这个Perl oneliner(复制自我需要拆分的Thunderbird收件箱,并在其上进行了测试)

perl-pe“open STDOUT,”>out“++$n if/^From/”<$IN>在第一次
或者,要使用0填充的数字:

perl -pe 'open STDOUT, sprintf(">m%05d.mbx", ++$n) if /^From /' < $IN > before-first
perl-pe'openstdout,sprintf(“>m%05d.mbx)”,++$n)如果在第一个

如果您正在使用mbox,可以提供帮助。另外,当您不希望按邮件而希望按文件大小进行拆分,以便每次拆分最多生成n mb时,您将如何使用bash和formail实现这一点?
formail
是我机器上procmail的一部分(
apt get install procmail
)。
formail
似乎非常原始。它似乎只是根据以
From:
开头的行分割文件。我有一些邮件在邮件正文的一行开头包含了这句话,
formail
将这些邮件一分为二,而不是将其视为一条单独的邮件。安德烈回答中的
git
解决方案对我来说效果更好;它只构建了一个与mbox相同的
msg.000
文件。
perl -pe 'open STDOUT, sprintf(">m%05d.mbx", ++$n) if /^From /' < $IN > before-first