From 492cd6904c3cb6569c9b728f57e0c48c8a7d7dc0 Mon Sep 17 00:00:00 2001 From: elijah Date: Thu, 13 Jan 2005 01:01:34 +0000 Subject: [PATCH] not working yet, but i am checking in changes git-svn-id: http://code.autistici.org/svn/backupninja/trunk@73 758a04ac-41e6-0310-8a23-8373a73cc35d --- handlers/maildir | 121 ++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 109 insertions(+), 12 deletions(-) diff --git a/handlers/maildir b/handlers/maildir index c07cd7e..2ea94ff 100644 --- a/handlers/maildir +++ b/handlers/maildir @@ -1,12 +1,18 @@ -#!/usr/bin/php4 -q - $tmp1 - ssh -p $destport $desthost 'ls -1 '$destdir/maildir/$i' | sort > $tmp2 + ssh -p $destport $desthost ls -1 '$destdir/maildir/$i' | sort > $tmp2 for deluser in `join -v 2 $tmp1 $tmp2`; do cmd="ssh -p $destport $desthost rm -vr '$destdir/maildir/$i/$deluser/'" debug $cmd @@ -101,27 +120,105 @@ function do_remove() { rm $tmp2 } +function do_rotate() { + backuproot=$destdir + now=`date %s` + seconds_daily=86400 + seconds_weekly=604800 + seconds_monthly=2628000 + + ssh -o PasswordAuthentication=no $desthost -l $destuser < 0; i-- )); do + if [ -d \$dir.\$i ]; then + if [ -f \$dir.\$i/rotated ]; then + rotated=\`tail -1 \$dir.\$i/rotated\` + else + rotated=0 + fi + cutoff_time=\$(( now - (seconds*i) )) + if [ \$rotated -gt \$cutoff_time ]; then + next=\$(( i + 1 )) + echo "mv \$dir.\$i \$dir.\$next" + mv \$dir.\$i \$dir.\$next + date +%c%n%s > \$dir.\$next/rotated + else + echo "Info: skipping rotation of \$dir.\$i because it was already rotated within the last " \$((cutoff_time/86400)) " days." + fi + fi + done + done + + max=\$((keepdaily+1)) + if [ ( \$keepweekly -a -d $backuproot/daily.\$max ) -a ! -d $backuproot/weekly.1 ]; then + echo mv $backuproot/daily.\$max $backuproot/weekly.1 + mv $backuproot/daily.\$max $backuproot/weekly.1 + date +%c%n%s > $backuproot/weekly.1/rotated + fi + + max=\$((keepweekly+1)) + if [ ( \$keepmonthly -a -d $backuproot/weekly.\$max ) -a ! -d $backuproot/monthly.1 ]; then + echo mv $backuproot/weekly.\$max $backuproot/monthly.1 + mv $backuproot/weekly.\$max $backuproot/monthly.1 + date +%c%n%s > $backuproot/monthly.1/rotated + fi + + for rottype in daily weekly monthly; do + max=\`echo keep\${rottype}\` + max=\$((max+1)) + dir="$backuproot/\$rottype" + oldest=\`ls -d $\dir.* | sed 's/^.*\.//' | sort -n | tail -1\` + + # if we've rotated the last backup off the stack, remove it. + for (( i=\$oldest; i >= \$max; i-- )); do + if [ -d \$dir.\$i ]; then + echo "Info: removing \$dir.\$i" + rm -rf \$dir.\$i + fi + done + done +EOF +} + + ### ################################################################## ### ROTATE BACKUPS ### -if [ "$remove" == "yes" ]; then - +if [ "$rotate" == "yes" ]; then + do_rotate fi ### REMOVE OLD MAILDIRS ### -if [ "$rotate" == "yes" ]; then - +if [ "$remove" == "yes" ]; then + debug remove fi ### ROTATE BACKUPS ### if [ "$letter" != "" ]; then - + debug letter fi if [ "$user" != "" ]; then - + debug user fi -- 2.30.2