From 38e440ae67cd88cd88a975eb275144ffda3ec57a Mon Sep 17 00:00:00 2001 From: smckown Date: Mon, 9 Nov 2009 15:04:19 +0000 Subject: [PATCH] This script can selectively remove backups. Be sure no backuppc tasks run during execution of this script, and call BackupPC_nightly afterward. --- BackupPC_deleteBackup | 123 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 BackupPC_deleteBackup diff --git a/BackupPC_deleteBackup b/BackupPC_deleteBackup new file mode 100644 index 0000000..620752d --- /dev/null +++ b/BackupPC_deleteBackup @@ -0,0 +1,123 @@ +#! /bin/sh +# +usage="\ +Usage: $0 -c [-d -b | -l] + +delete specified backups. +Attention! + If a full backup deleted all depending incr. backups + will also be deleted. + + -c - client machine for which the backup was made + -d - number of Backup which should be deleted + -b - delete all backups before this date (YYYY-MM-DD) + -l - list the backups which made for + -h - this help + +Example: +list backups of + $0 -c -l + +remove backup #3 from + $0 -c -d 3 + +remove all backups before 2007-07-02 from + $0 -c -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 -- 2.39.2