#!/bin/bash echo "Backup script v0.1" # The directory where the backups are stored BACKUP_ROOT='/var/bkp/' # Dir name for last backup link LASTONE='lastbkp' # Timestamp format TIMESTAMP=`date +%F-%T` # Directory to be backed up SUBJECT=${2%/} # Remove leading / case $1 in "make") # Create backup directories if they do't exist if [ ! -d "${BACKUP_ROOT}" ]; then echo "${BACKUP_ROOT} did not exist; creating it"; mkdir ${BACKUP_ROOT}; fi if [ ! -d "${BACKUP_ROOT}/$LASTONE-$SUBJECT" ]; then echo "${BACKUP_ROOT}/$LASTONE-$SUBJECT did not exist; creating it"; mkdir ${BACKUP_ROOT}/$LASTONE-$SUBJECT; fi # Synchronize files rsync -av --progress --link-dest $BACKUP_ROOT/$LASTONE-$SUBJECT "$SUBJECT/" "/${BACKUP_ROOT}/backup-$SUBJECT-$TIMESTAMP" # Clear out last backup point rm -r $BACKUP_ROOT/$LASTONE-$SUBJECT/* # Make transparent structure cp -al ${BACKUP_ROOT}/backup-$SUBJECT-$TIMESTAMP/* $BACKUP_ROOT/$LASTONE-$SUBJECT ;; "make-snap") if [ ! -d "${BACKUP_ROOT}" ]; then echo "${BACKUP_ROOT} did not exist; creating it"; mkdir ${BACKUP_ROOT}; fi if [ ! -d "${BACKUP_ROOT}/$LASTONE-$SUBJECT" ]; then echo "${BACKUP_ROOT}/$LASTONE-$SUBJECT did not exist; creating it"; mkdir ${BACKUP_ROOT}/$LASTONE-$SUBJECT; fi # Synchronize files rsync -av --progress $BACKUP_ROOT/$LASTONE-$SUBJECT "$SUBJECT/" "/${BACKUP_ROOT}/backup-$SUBJECT-$TIMESTAMP" # Clear out last backup point rm -r $BACKUP_ROOT/$LASTONE-$SUBJECT/* # Make transparent structure cp -al ${BACKUP_ROOT}/backup-$SUBJECT-$TIMESTAMP/* $BACKUP_ROOT/$LASTONE-$SUBJECT ;; "remove-old") echo "Removing backups from ${BACKUP_ROOT} older than a week" #remove older than last week #find $BACKUP_ROOT -maxdepth 1 -ctime +6 -print find $BACKUP_ROOT -mindepth 1 -maxdepth 1 -ctime +6 -not -name $LASTONE -exec rm -rv {} \; #find $BACKUP_ROOT -not -name $LASTONE -mindepth 1 -maxdepth 1 -print ;; "restore") # Restore file copies #cp -rv $BACKUP_ROOT/$LASTONE-$SUBJECT/* $SUBJECT/ rsync -av --progress --delete $BACKUP_ROOT/$LASTONE-$SUBJECT/ $SUBJECT/ ;; "list") echo "\$BACKUP_ROOT is $BACKUP_ROOT" echo -e "Available backups:\n" find $BACKUP_ROOT -name "${LASTONE}*" -print ;; "help") echo -e "Usage: $0 " echo -e " $0 list" echo -e "\tmake - makes a backup in \$BACKUP_ROOT" echo -e "\tmake-snap - makes a snapshot backup in \$BACKUP_ROOT" echo -e "\tremove-old - removes backups which have change time longer than a week ago" echo -e "\trestore - restores a backup" echo -e "\tlist - shows last backups" echo -e "This script should be run in the directory where the source directory is located" echo -e "since it uses parameter as backup name" ;; esac