#!/bin/bash# how many backups to keepKEEP=3# prefix of backups (must be a local path)# if /path/backup is used, then /path/backup.2005-09-03.12-45-23 etc. will be created (with current date)PREFIX=/backup/oxygen/tmp# source to backup fromSOURCE=/tmp############################################################ get current timestampNOW=`date +%Y-%m-%d.%H-%M-%S`echo "[BACKUP] Starting at "`date`echo "[BACKUP] Backing up "$SOURCE" to "$PREFIX"."$NOWCOUNT=0for i in $PREFIX.*do if [ -d $i -a ! -L $i ] then COUNT=$(($COUNT+1)) fidone;TOTAL=$COUNTDELETE=$(($TOTAL-$KEEP))echo "[BACKUP] "$TOTAL" total backups, "$DELETE" to delete"COUNT=0for i in $PREFIX.*do if [ -d $i -a ! -L $i ] then COUNT=$(($COUNT+1)) if [ $COUNT -le $DELETE ] then echo "[BACKUP] Removing "$i rm -rf $i fi if [ $COUNT -eq $TOTAL ] then LATEST=$i fi fidone;echo "[BACKUP] Latest is "$LATEST# copy using hardlinks to new timestamp directoryecho "[BACKUP] Creating new directory with hardlinks.."cp -al $LATEST $PREFIX.$NOW# do actual backupecho "[BACKUP] Running rsync.."rsync -aHx --numeric-ids --delete $SOURCE $PREFIX.$NOW/# create symlink for currentrm $PREFIX.curln -s $PREFIX.$NOW $PREFIX.curecho "[BACKUP] Done"