#!/bin/bash
# how many backups to keep
KEEP=5
# 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/etc
# source to backup from
SOURCE=/etc
###########################################################
# 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
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"