#!/bin/sh # A free script to rotate mail by Michael Shigorin # v20011020 # moves $MBOXES (wildcards allowed) in $MAIL to files named after $DATEFMT in # directories under $ARCROOT, leaving fresher than $KEEP (see also $SINCEAFTER) # not to leave mailboxes empty. # WARNING: BACKUP YOUR MAIL BEFORE USING! NO WARRANTIES! MDIR="$HOME/mail" ARCROOT="$MDIR/archive" MBOXES="_* READ MDS" LOG="$ARCROOT/mailrotate.log" KEEP="7 days" # to leave me in context KEEPEMPTY= # keep empty boxes? "" or non-empty string SKIPEXIST= # skip existing archive mbox or append to it? MODE=644 # mktemp will DATEFMT="%Y-%m-%d" SINCEAFTER=after # ...or "since". One day difference. MAILPS="mutt" # egrep's regexp, i.e. (mutt|pine|sylpheed) echo `date +$DATEFMT` >>$LOG [ -n "`ps -u $USER | egrep " $MAILPS$"`" ] && { echo "$MAILPS running as $USER, exiting..." >>$LOG exit } || echo "$0: starting..." >>$LOG perl -e 'require Date::Parse; require Date::Manip' || { echo "ERROR: grepmail needs Date::Parse and Date::Manip to" >&2 echo " enable -d option (which we need)." >&2 echo >&2 echo "Exiting to keep your mail safe; please run" >&2 echo "perl -MCPAN -e 'install Date::Parse' && perl -MCPAN -e 'install Date::Manip'" >&2 echo "as root to install the needed modules!" >&2 exit 1 } cd "$MDIR" for i in $MBOXES; do [ ! -f "$i" -o -f "$i.lock" ] && continue ARCDIR="$ARCROOT/$i" [ -d "$ARCDIR" ] || mkdir -p "$ARCDIR" ARCMBOX="$ARCDIR/`date -d "$KEEP ago" +$DATEFMT`" [ -f "$ARCMBOX" -a "$SKIPEXIST" ] && continue TMPFILE="`mktemp "$i.tmp-XXXXXX"`" grepmail -had "$SINCEAFTER $KEEP ago" "$i" >"$TMPFILE" 2>>$LOG # [ -f "$ARCMBOX" ] && echo "WARNING: $ARCMBOX already exists!" >>$LOG grepmail -vhad "$SINCEAFTER $KEEP ago" "$i" >>"$ARCMBOX" 2>>$LOG [ -s "$TMPFILE" -o "$KEEPEMPTY" ] && { mv "$TMPFILE" "$i" chmod $MODE "$i" } [ -s "$ARCMBOX" -o "$KEEPEMPTY" ] || rm -f "$ARCMBOX" done find "$MDIR/" -name '*.tmp-*' | xargs rm -rf echo "$0: done." >>$LOG