1

I need a way (a script) too move all but the last 100 messages from a users mail-spool (/var/spool/mail/theuser) to a file/mbox in the users mail-directory (/home/theuser/mail). Is there an easy way to do this?

1 Answer 1

2

Here's a quick and dirty head start. No error checking, and it doesn't actually "move" anything as is.

#!/usr/local/bin/bash
#
# DIRTY hack to append all but the last 100 messages from each file
# in a dir of mbox files to like named files in /tmp
#
# if an mbox has less than 101 messages, skip it
#
# requires formail (from the procmail installation..)

#
# we're writing in tmp - to write in the user's dir move this 
# inside the for loop and use $USERMAIL to write the base path
DESTDIR="/tmp"

for USERMAIL in `ls -1`

do
MESSAGECOUNT=`cat $USERMAIL | formail -q -s wc | wc -l | sed 's/^[ \t]*//'`
COPYTHISMANY=`expr $MESSAGECOUNT - 100`
if [ $COPYTHISMANY -gt 0 ]
then
echo "Copying $COPYTHISMANY messages from $USERMAIL to /tmp/$USERMAIL.allbutlast100"
cat $USERMAIL | formail -$COPYTHISMANY -s cat >> $DESTDIR/$USERMAIL.allbutlast100
# copy the last 100 to a new file
cat $USERMAIL | formail +$COPYTHISMANY -s cat >> $DESTDIR/$USERMAIL.last100
# to replace the original source mbox do something like
# mv /tmp/$USERMAIL.last100 $USERMAIL
fi
done
1
  • Thanks! It seemd to work well with a few test mboxes. It gave an error (in norwegian) several times: "wc: standard inn:35: Ugyldig eller ufullstendig multibyte eller bredt tegn" (illegal or incomplete multibyte or "wide" character). But it worked :-)
    – MyOnlyEye
    Mar 3, 2010 at 16:56

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .