]> oss.titaniummirror.com Git - ovzbpc.git/commitdiff
This script can selectively remove backups. old/backuppc
authorsmckown <smckown@986fd584-583e-0410-b54d-b9fe63dff8e5>
Mon, 9 Nov 2009 15:04:19 +0000 (15:04 +0000)
committerR. Steve McKown <rsmckown@gmail.com>
Wed, 16 Dec 2009 17:27:48 +0000 (10:27 -0700)
Be sure no backuppc tasks run during execution of this script, and call
BackupPC_nightly afterward.

BackupPC_deleteBackup [new file with mode: 0644]

diff --git a/BackupPC_deleteBackup b/BackupPC_deleteBackup
new file mode 100644 (file)
index 0000000..620752d
--- /dev/null
@@ -0,0 +1,123 @@
+#! /bin/sh
+#
+usage="\
+Usage: $0 -c <client> [-d <backupnumber> -b <before data> | -l]
+
+delete specified backups.
+Attention!
+ If a full backup deleted all depending incr. backups
+ will also be deleted.
+
+       -c <client>     - client machine for which the backup was made
+       -d <number>     - number of Backup which should be deleted
+       -b <date>       - delete all backups before this date (YYYY-MM-DD)
+       -l              - list the backups which made for <client>
+       -h              - this help
+
+Example:
+list backups of <client>
+ $0 -c <name of the client which was backed up> -l
+
+remove backup #3 from <client>
+ $0 -c <name of the client which was backed up> -d 3
+
+remove all backups before 2007-07-02 from <client>
+ $0 -c <name of the client which was backed up> -b 2007-07-02
+"
+
+typeset -i len
+clUser=root
+type="rsa"
+
+while test $# -gt 0; do
+       case "$1" in
+       -c | --client )
+               shift; client=$1; shift;;
+       -b | --before )
+               shift; bDate=$1; shift;;
+       -d | --delete )
+               shift; bNumber=$1; shift;;
+       -l | --list )
+               list="true"; shift;;
+       * | -h | --help)
+               echo "$usage"
+               exit 0
+               ;;
+       esac
+done
+
+if [ -z "$client" ] || [ -z $list ] && [ -z $bNumber ] && [ -z $bDate ]
+then
+       echo "$usage"
+       exit 0
+fi
+
+TopDir=`grep $Conf{TopDir} /etc/backuppc/config.pl | awk '{print $3}'`
+len=${#TopDir}-3
+TopDir=${TopDir:1:len}
+ls $TopDir/pc > /dev/null 2>&1
+while [ $? != 0 ]
+do
+       read -p "examined $TopDir seems wrong. What is TopDir ? " TopDir
+       ls $TopDir/pc > /dev/null 2>&1
+done
+
+ls $TopDir/pc/$client > /dev/null 2>&1
+if [ $? != 0 ]
+then
+       echo "$client have no backups"
+       exit 1
+fi
+
+if [ ! -z $list ]
+then
+       while read CLine
+       do
+               BackupNumber=`echo $CLine | awk '{print $1}'`
+               BackupType=`echo $CLine | awk '{print $2}'`
+               BackupTime=`stat -c "%y" $TopDir/pc/$client/$BackupNumber | awk '{print $1}'`
+               echo "BackupNumber $BackupNumber - $BackupType-Backup from $BackupTime"
+       done < $TopDir/pc/$client/backups
+       exit 0
+fi
+
+if [ ! -z $bNumber ] && [ ! -e $TopDir/pc/$client/$bNumber ]
+then
+       echo "Backup Number $bNumber does not exist for client $client"
+       exit 1
+fi
+
+delete2full="false"
+rm -f $TopDir/pc/$client/backups.new > /dev/null 2>&1
+while read CLine
+do
+       BackupNumber=`echo $CLine | awk '{print $1}'`
+       BackupTime=`stat -c "%y" $TopDir/pc/$client/$BackupNumber | awk '{print $1}'`
+       BackupType=`echo $CLine | awk '{print $2}'`
+       if [ $BackupType == "full" ]
+       then
+               delete2full="false"
+       fi
+       if [ "$BackupTime" \< "$bDate" ] || [ $BackupNumber == "$bNumber" ] || [ $delete2full == "true" ]
+       then
+               if [ $BackupType == "full" ]
+               then
+                       if [ $delete2full == "false" ]
+                       then
+                               delete2full="true"
+                       else
+                               delete2full="false"
+                       fi
+               fi
+               bNumber=$BackupNumber
+               echo "remove $TopDir/pc/$client/$bNumber"
+               rm -fr $TopDir/pc/$client/$bNumber > /dev/null 2>&1
+       fi
+       if [ $BackupNumber != $bNumber ]
+       then
+               echo "$CLine" >> $TopDir/pc/$client/backups.new
+       fi
+done < $TopDir/pc/$client/backups
+mv $TopDir/pc/$client/backups.new $TopDir/pc/$client/backups
+
+exit $?
\ No newline at end of file