#!/bin/bash # how many backups to keep KEEP=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 from SOURCE=/tmp ########################################################### # get current timestamp NOW=`date +%Y-%m-%d.%H-%M-%S` echo "[BACKUP] Starting at "`date` echo "[BACKUP] Backing up "$SOURCE" to "$PREFIX"."$NOW COUNT=0 for i in $PREFIX.* do if [ -d $i -a ! -L $i ] then COUNT=$(($COUNT+1)) fi done; TOTAL=$COUNT DELETE=$(($TOTAL-$KEEP)) echo "[BACKUP] "$TOTAL" total backups, "$DELETE" to delete" COUNT=0 for 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 fi done; echo "[BACKUP] Latest is "$LATEST # copy using hardlinks to new timestamp directory echo "[BACKUP] Creating new directory with hardlinks.." cp -al $LATEST $PREFIX.$NOW # do actual backup echo "[BACKUP] Running rsync.." rsync -aHx --numeric-ids --delete $SOURCE $PREFIX.$NOW/ # create symlink for current rm $PREFIX.cur ln -s $PREFIX.$NOW $PREFIX.cur echo "[BACKUP] Done"