Per quanto io abbia cercato in lungo e in largo, non son riuscito a trovare script per splittare un file mbox in base alla grandezza dei frammenti risultanti. Questo è piuttosto grezzo, ma per me è sufficiente.
Partendo da come splittare un file mbox in tanti file quanti sono i messaggi
cat $FI | formail -s sh -c 'cat > /tmp/mbox_$FILENO'
ho aggiunto la parte relativa al riassemblaggio dei file rimanendo più o meno nel limite di byte prefissato.
#!/bin/bash # # Splitta un file mbox in un file per ogni messaggio, # poi li rimette insieme senza superare un limite (da # esprimere in kilobyte). # # Creato da Iron Bishop il 17.08.2006 - pubblico dominio # FI=$1 SIZEL=$(( $2 + 0 )) i=0 j=0 fn=/tmp/mbox_000 if [[! -e $FI || ! $SIZEL]] ; then echo "Usage: $0 filename sizelimit" exit 1 fi if [[-e $FI$i]] ; then echo "Interrotto: il file $FI$i esiste!" exit 2 fi echo "File da splittare: $FI" echo "Limite di spazio: $SIZEL" cat $FI | formail -s sh -c 'cat > /tmp/mbox_$FILENO' echo "Messaggi trovati: `ls -1 /tmp/mbox_* | wc -l`" while [ -e $fn ] ; do cat $fn >> $FI$i if [ `du -k $FI$i | cut -f1` -gt $SIZEL ] ; then i=$(( $i + 1 )) fi j=$(( $j + 1 )) if [ $j -lt 10 ] ; then fn=/tmp/mbox_00$j elif [ $j -lt 100 ] ; then fn=/tmp/mbox_0$j else fn=/tmp/mbox_$j fi done echo -e "(debug: i=$i, j=$j, fn=$fn)" rm -f /tmp/mbox_* j=0 while [ $j -le $i ] ; do echo -e "x\n" | mail -f $FI$j | grep "var/mail" j=$(( $j + 1 )) done
en: this explain how to split a mbox mail file in multiple files of (more or less) the size required