#!/bin/sh # # Home directory automatic backup script # # Autor: Adam Drzewiecki # e-mail: A.Drzewiecki@ztpnet.pl # Last modified: 13 Nov 2008 # # # Configuration # # Backup file folder (it must not be in backuped content) BACKUP_DIR="/root/backup" # Archive format: "gz" or "bz2" FORMAT="bz2" # Save last "PRESERVE" backup copies PRESERVE="2" # Backuped content BACKED_UP="/home" # Base part of the backup filename BASE="home-backup-" # Filename format (default: home-backup-RRRRMMDD) FILENAME="${BASE}$(date +%Y%m%d)" # Archiver CMD="tar" # # Working part of the script # # Build filename and commandline from configuration variables case $FORMAT in bz2) SUFFIX="tar.bz2" OPTIONS="jcf" ;; gz) SUFFIX="tar.gz" OPTIONS="zcf" ;; *) echo "$(date):" echo "Script $(basename $0): unknown archive format ($FORMAT)." echo exit 1 ;; esac # Fullname of archive file FULLNAME="$BACKUP_DIR/$FILENAME.$SUFFIX" # Archiver commandline CMDLINE="$CMD $OPTIONS $FULLNAME $BACKED_UP" # Archive files mask MASK="${BASE}*.$SUFFIX" # If archive folder doesn't exist... if [ ! -d "$BACKUP_DIR" ]; then # ...try to make it with needed parent directories if (mkdir -p $BACKUP_DIR) then # OK message echo "$(date):" echo "Script $(basename $0): folder $BACKUP_DIR has been made" echo else # Emit failure message, terminate script with error code echo "$(date):" echo "Script $(basename $0): folder $BACKUP_DIR HASN'T been made" echo exit 1 fi fi # Do the new backup file if backup from today doesn't exist if [ ! -f "$FULLNAME" ]; then # Inform administrator about commandline echo "$(date):" echo "Script $(basename $0): launching archivisation command:" echo "$CMDLINE" echo # Launch prepared CMDLINE if ($CMDLINE) then # # Success # echo echo "$(date):" echo "Script $(basename $0): created new backup file:" echo echo "$(ls -lh $FULLNAME)" echo else # # Failed. Cleaning up # echo echo "$(date):" echo "Script $(basename $0): there was an error during creation of $FULLNAME" echo # # Removing created archive file, if it exists # if [ -f "$FULLNAME" ]; then # Removing archive file if (rm "$FULLNAME") then # Success echo "File $FULLNAME has been removed." echo else # Failure echo "File $FULLNAME HASN'T been removed!" echo fi fi # There was an error, terminate script exit 1 fi # # New backup file has been created. Removing old backup files # # List of last PRESERVE backup files SAVE="$(ls -1 $BACKUP_DIR/$MASK | tail -n $PRESERVE)" # Generating information for administrator echo "Cleaning up backup files folder:" # For every backup file structured file in the backup files folder... for FILE in $BACKUP_DIR/$MASK; do # ... test if it isn't in the preserved files list if (! echo $SAVE | grep -q $FILE) then # Start memo line about deleting file echo -n "File $FILE: " # Try to remove file if (rm "$FILE") then echo "has been deleted" else echo "HASN't been deleted!" fi else # File is one of saved backup files echo "File $FILE: preserved" fi done fi