#! /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 $?