#!/bin/bash # # Backup script - gateway # # This script is intended to be run as root, as a cron-job # TODO: Add validation to un-screw-up /some/messed/dir/ (problem with trailing /) # # Author: Alan Briolat # # Set directories to back up #DIRS="/etc:/home/alan:/root:/var/lib/portage"; DIRS="/etc:/root:/var/lib/portage"; # Set backup server BACKUP_HOST="lithium"; # Set dotglob so that .files are included when compressing shopt -s dotglob; # Get hostname HOSTNAME=$(hostname); # Get datestamp DATE=$(date +"%Y-%m-%d-%H%M"); # Create working directory and cd into it WORKING_DIR=/tmp/backup-${DATE}; mkdir -p ${WORKING_DIR} || { echo "Could not create ${WORKING_DIR}"; exit 1; }; cd ${WORKING_DIR} || { echo "Could not 'cd' to ${WORKING_DIR}"; exit 1; }; # Iterate through directories for CURRENT_DIR in $( echo $DIRS | sed 's/:/ /g'); do { # Check that the path is absolute if [ ! ${CURRENT_DIR:0:1} = '/' ]; then { echo "${CURRENT_DIR} is not an absolute path"; exit 1; }; fi; # Check that the path exists if [ ! -e $CURRENT_DIR ]; then { echo "$CURRENT_DIR does not exist"; exit 1; }; fi; # If everything is fine, generate a filename ... FILENAME_DIR=$( echo ${CURRENT_DIR:1} | sed 's/\//./g' ); FILENAME="${WORKING_DIR}/${HOSTNAME}-${FILENAME_DIR}-${DATE}.tar.bz2"; # ... and create the archive! cd ${CURRENT_DIR}; # Added 'nice -n 15' to stop it bugging me at 3am! nice -n 15 tar -cjpf ${FILENAME} *; }; done; # Send files to server via SCP #cp ${WORKING_DIR}/* /backup/files/ scp -Bq -i /root/.ssh/backup_dsa ${WORKING_DIR}/* backup@${BACKUP_HOST}:/backup/files #scp -Bq -i /root/.ssh/backup_dsa ${WORKING_DIR}/* backup@${BACKUP_HOST}:/backup/${HOSTNAME}/ # LAST SECTION!!! # Move out of temp dir and clean up cd .. rm -rf ${WORKING_DIR}