#!/bin/sh

# some config
DIROUT=/var/ftp/backup
LOGFILE=/var/log/mkbackup.log
# num of days ago to keep files, any oldest which present in FILE will be removed!
# for ex: if keepdays is set to '2', then today and yesterday files will be kept.
KEEPDAYS=9

if [ -z "$1" ]; then
	echo "Usage: ${0##*/} FILES..."
	echo "    where each FILE contains list of absolute pathed dirs"
	echo "    that should be backed up; it is passed to '-T' tar option"
	exit 0
fi

CURDATE=`date +%Y%m%d`
CURDATE_FULL=`date "+%Y-%m-%d %H:%M:%S"`

echo "######## $CURDATE_FULL Starting mkbackup... ########" | tee -a $LOGFILE
echo "####  DIROUT: $DIROUT"
echo "#### LOGFILE: $LOGFILE"
echo

# save argument list, needed later for cleanup part
ARGS="$@"

# backup part
while [ -n "$1" ]; do
	# make mrproper :)
	lst=$1
	fname=${lst##*/}
	fname=${fname%*.lst}
	fname=${fname//./_}

	# create new tars, then bz2'em
	fname=$DIROUT/$fname.$CURDATE.tar

	# ignore tar exit code 1 'some files differ' not to leave non-compressed
	# file alone. we assume that 0 and 1 code means success here
	tar -csp -T "$lst" >"$fname" 2>>"$LOGFILE"
	if [ $? -eq 0 ] || [ $? -eq 1 ]; then
		bzip2 -9z "$fname" 2>>"$LOGFILE" && \
		bzip2 -t "$fname.bz2" 2>>"$LOGFILE"
	fi

	if [ $? -eq 0 ]; then
		echo "created: $fname.bz2"
	else
		echo "ERROR: while processing $fname.bz2"
	fi

	shift
done

# cleanup part, don't qoute ARGS here, it is "$@" list
for arg in $ARGS; do
	# make mrproper :)
	fname=${arg##*/}
	fname=${fname%*.lst}
	fname=${fname//./_}

	# remove old backups
	for f in $(find $DIROUT -name "$fname.*.tar.bz2" -daystart -mtime +$[$KEEPDAYS-1]); do
		rm "$f"
		if [ $? -eq 0 ]; then
			echo "removed: $f"
		fi
	done
done
