This script requires genuine cp -al capable gnu and rsync commands together with a hardlink capable FS + OS.
#!/bin/bash
[ $# -ne 2 ] && echo "Incorrect usage : $0 <source path> <target path>" && exit 128 ;
SOURCEFOLDER=$1
TARGETFOLDER=$2
SF_LEN=${#SOURCEFOLDER}-1
TF_LEN=${#TARGETFOLDER}-1
#echo "Last character in source folder is ${SOURCEFOLDER:SF_LEN}"
if [ "${SOURCEFOLDER:SF_LEN}" != "/" ] ; then
echo "Adding trailing slash"
SOURCEFOLDER=$SOURCEFOLDER"/"
fi
#echo "Last character in target folder is ${TARGETFOLDER:TF_LEN}"
if [ "${TARGETFOLDER:TF_LEN}" != "/" ] ; then
echo "Adding trailing slash"
TARGETFOLDER=$TARGETFOLDER"/"
fi
echo $SOURCEFOLDER
echo $TARGETFOLDER
LOCKFILE=/tmp/`echo $0 $SOURCEFOLDER $TARGETFOLDER | sed "s/[^[:alnum:]]/_/g"`.lck
echo "Lockfile : $LOCKFILE"
[ ! -d $SOURCEFOLDER ] && echo "Source does not exist !! $SOURCEFOLDER exitting with error" && exit 1;
TIMESTAMP=$(date --utc +%Y%m%d%H%M )
#echo $TIMESTAMP
if [ ! -d $TARGETFOLDER ]; then
mkdir $TARGETFOLDER
rsync -av --delete $SOURCEFOLDER $TARGETFOLDER/$TIMESTAMP/
else
[ -d $TARGETFOLDER/$TIMESTAMP/ ] && echo "Folder already there !! Leaving.. " && exit 0;
LASTBACKUP=$(ls $TARGETFOLDER | sort -rn | head -1)
echo "Link copying $TARGETFOLDER/$LASTBACKUP to $TARGETFOLDER/$TIMESTAMP/"
cp -al $TARGETFOLDER/$LASTBACKUP $TARGETFOLDER/$TIMESTAMP/
rsync -av $SOURCEFOLDER $TARGETFOLDER/$TIMESTAMP/
fi
echo " OK !! Done"
