How to split mailbox into single file per message?
Just use formail
. formail
is a program that can process mailbox, run some actions for each message in the mailbox, separate messages and so on.
More info: http://www.manpagez.com/man/1/formail/
If you want just split a mailbox to separate files, I would suggest such solution:
$ cat $MAIL | formail -ds sh -c 'cat > msg.$FILENO'
From man:
FILENO
While splitting, formail assigns the message number currently
being output to this variable. By presetting FILENO, you can
change the initial message number being used and the width of the
zero-padded output. If FILENO is unset it will default to 000.
If FILENO is non-empty and does not contain a number, FILENO gen-
eration is disabled.
Git (git mailsplit
) can do this as well.
For example,
wget ftp://lists.gnu.org/bug-tar/2014-09
git mailsplit -o. 2014-09
If you don't have formail, you can also use this Perl oneliner (copied from here, and just tested on a Thunderbird Inbox I needed to split)
perl -pe 'open STDOUT, ">out".++$n if /^From /' < $IN > before_first
or, to have 0-padded numbers:
perl -pe 'open STDOUT, sprintf(">m%05d.mbx", ++$n) if /^From /' < $IN > before-first