#!/bin/bash
#########################
# Backups to DESTINATION_FOLDER / Zips and performs basic rotation
##########################
SOURCE_FOLDER="/source/" # source folder
DESTINATION_FOLDER="/backup/" # mounted folder
BASENAME="basename $SOURCE_FOLDER"
ROTATE_PERIOD=10
# datestamp has a formatted date
datestamp=`date +"%d-%m-%Y"`
#### Display command usage ########
usage()
{
cat << EOF
USAGE:
backuprot [OPTIONS] /source_folder/ /destination_folder/
Back up and entire folder, creates tgz and ,
performs x day rotation of backups Must provide source anddestination folders
OPTIONS:
-p Specify Rotation period in days - default is $ROTATE_PERIOD
EXAMPLES:
backuprot -p 5 [/source_folder/] [/destination_folder/]
EOF
}
#### Getopts #####
while getopts ":p " opt; do
case "$opt" in
p) ROTATE_PERIOD=${OPTARG};;
\?) echo "$OPTARG is an unknown option"
usage
exit 1
;;
esac
done
 
shift $((OPTIND-1))
if [ -z "$1" ] || [ -z "$2" ]; then
usage
else
# Backup and gzip the directory
SOURCE_FOLDER=$1
BASENAME=`basename "$SOURCE_FOLDER"`
TGZFILE="$BASENAME-$datestamp.tgz"
LATEST_FILE="$BASENAME-Latest.tgz"
DESTINATION_FOLDER=$2
echo "Starting Backup and Rotate "
echo "-----------------------------"
echo "Source Folder : $SOURCE_FOLDER"
echo "Target Folder : $DESTINATION_FOLDER"
echo "Backup file : $TGZFILE "
echo "-----------------------------"
if [ ! -d "$SOURCE_FOLDER" ] || [ ! -d "$DESTINATION_FOLDER" ] ; then
echo "SOURCE ($SOURCE_FOLDER) or DESTINATION ($DESTINATION_FOLDER) folder doesn't exist/ or is misspelled, check & re-try."
exit 0;
fi
echo "Creating $SOURCE_FOLDER/$TGZFILE ... "
tar zcvf $SOURCE_FOLDER/$TGZFILE $SOURCE_FOLDER
echo "Copying $SOURCE_FOLDER/$TGZFILE to $LATEST_FILE ... "
cp $SOURCE_FOLDER/$TGZFILE $SOURCE_FOLDER/$LATEST_FILE
echo "Moving $TGZFILE -- to --> $DESTINATION_FOLDER "
mv $SOURCE_FOLDER/$TGZFILE $DESTINATION_FOLDER
echo "Moving $LATEST_FILE -- to --> $DESTINATION_FOLDER "
mv $SOURCE_FOLDER/$LATEST_FILE $DESTINATION_FOLDER
# count the number of file(s) in the appropriate folder Rotate the logs, delete older than
# ROTATE_PERIOD days, if their are at_least 7 backups
FILE_COUNT=`find $DESTINATION_FOLDER -maxdepth 1 -type f | wc -l`
echo " Rotation period $ROTATE_PERIOD for $DESTINATION_FOLDER "
echo " $FILE_COUNT files found in $DESTINATION_FOLDER folder"
echo " find $DESTINATION_FOLDER -mtime +$ROTATE_PERIOD"
echo " -----------------------------------"
if [ $FILE_COUNT -gt $ROTATE_PERIOD ]; then
echo "Removing backups older than $ROTATE_PERIOD in $DESTINATION_FOLDER"
echo "Removing these old backup files..."
find $DESTINATION_FOLDER -mtime +$ROTATE_PERIOD -exec rm {} \;
else
echo "Only $FILE_COUNT file, NOT removing older backups in $DESTINATION_FOLDER "
fi
fi
echo "----------------"
echo "Backup_rot Complete. :"
echo "to extract file >> tar -xzvf $TGZFILE "