#!/bin/bash if [ ! $1 -a $2 -a $3 ] then echo "Wrong parameter count." exit 1 fi ##################### # PARAMETER # ##################### TARGETDIR=$2 SRCPATH=`echo $1 | awk -F:: '{ print $2 }'` SRCDIR=`basename "${SRCPATH}"` SRCPARENT=`dirname "${SRCPATH}"` EXCLUDES=`echo $1 | awk -F:: '{ print $3 }'` TSTAMP=`date +%Y%m%d` JOBNAME=$3 RSYNCEXEC=`type -p "rsync"` ################### # BACKUP # ################### if [ -d $SRCPATH -a -d $TARGETDIR ] then # Check for existing backup file if [ -f "${TARGETDIR}${JOBNAME}_${TSTAMP}.tgz" ] then suffix=2 while [ -f "${TARGETDIR}${JOBNAME}_${TSTAMP}_${suffix}.tgz" ] do suffix=`expr $suffix + 1` done BACKUPNAME="${JOBNAME}_${TSTAMP}_${suffix}" else BACKUPNAME="${JOBNAME}_${TSTAMP}" fi BACKUPFILE="${TARGETDIR}${BACKUPNAME}.tgz" # Make a temporary copy if rsync is available if [ -n $RSYNCEXEC ] then RSYNCTMPDIR="tmp.`cat /dev/urandom | env LC_CTYPE=C tr -cd 'a-f0-9' | head -c 32`" if [ -d "${TARGETDIR}${RSYNCTMPDIR}" ] then suffix=2 while [ -d "${TARGETDIR}${RSYNCTMPDIR}_${suffix}" ] do suffix=`expr $suffix + 1` done RSYNCDIR="${TARGETDIR}${RSYNCTMPDIR}_${suffix}" else RSYNCDIR="${TARGETDIR}${RSYNCTMPDIR}" fi $RSYNCEXEC -a $SRCPATH $RSYNCDIR if [ $? -eq 0 ] then SRCPARENT=$RSYNCDIR fi fi # Begin tar backup tar -czf ${BACKUPFILE} --ignore-failed-read --warning=file-changed --directory ${SRCPARENT} ${SRCDIR} &> /dev/null 2> ${BACKUPFILE}.err if [ $? -eq 0 ] then echo Backup $BACKUPFILE created if [ -f ${BACKUPFILE}.err ] then rm ${BACKUPFILE}.err &> /dev/null fi if [ -n $RSYNCEXEC -a -d $RSYNCDIR ] then rm -rf $RSYNCDIR &> /dev/null fi exit 0 else cat ${BACKUPFILE}.err if [ -f $BACKUPFILE ] then rm $BACKUPFILE &> /dev/null fi if [ -f ${BACKUPFILE}.err ] then rm ${BACKUPFILE}.err &> /dev/null fi if [ -n $RSYNCEXEC -a -d $RSYNCDIR ] then rm -rf $RSYNCDIR &> /dev/null fi exit 1 fi else echo "Check target and source directories!" exit 1 fi