#!/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 "