#!/bin/bash


#+++++++++++++++++++++++++++++++++++++++++++++++++++
# eSales Media Backup Script
#
# Author: Benjamin Roth
# Version: 18.0.3
#+++++++++++++++++++++++++++++++++++++++++++++++++++


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 -o $? -eq 1 ]
	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