Basic Backup Script
This is a very basic and rough script.
It uses diskutil on Mac OS X to generate a disk image and then copy this disk image to a location. Improvements are welcome.
#!/bin/bash
##
## Very Basic backup script. V.00003
##
# Copyright 2006 Henri Shustak GNU GPU v3
## Settings
# Log File
logfile=""
backup_name="Backup1"
# Volume with Data
backup_src_volume="/Volumes/SoruceVolume"
# This is messy - should be fixed
if [ "${backup_src_volume}" == "/" ] ; then
# Only works with source volumes with no spaces - due the last awk - either improve this script or put in the actual volume name
will_it_work=`ls -l /Volumes/ | grep -e "-> /$" | awk -F " -> /" '{print $1}' | awk '{print NF}'`
if [ $will_it_work == 9 ] ; then
backup_src_volume=/Volumes/`ls -l /Volumes/ | grep -e "-> /$" | awk -F " -> /" '{print $1}' | awk '{print $9}'`
else
echo "WARNING! : Specify the full volume name, even if it is the root directory." | tee -ai >> "$logfile"
fi
fi
# Folder to Backup
backup_src="${backup_src_volume}/path/to/directory/to/backup"
# Volume we are using for backups
backup_dst_volume=/Volumes/DestVolumeName
# Destination for Backup
backup_dst="/Volumes/${backup_dst_volume}/Backups/${backup_name}/"
# Backup Locking
lock_file_dir="/tmp/"
primary_lock_file_name="${lock_file_dir}basic_backup_inprogress.lock"
# Templocation for files
temp_location="/tmp/"
## Preflight Check
backup_volume_name=`basename "$backup_dst_volume"`
backup_volume_check=`ls /Volumes/ | grep -x "$backup_volume_name"`
if [ "$backup_volume_check" != "$backup_volume_name" ] ; then
echo "ERROR! : Volume is unavailible" | tee -ai >> "$logfile"
echo " Backup will not continue" | tee -ai >> "$logfile"
exit -1
fi
function run_backup {
current_date=`date "+%Y-%m-%d"`
backup_image="${backup_name}-(${current_date}).dmg"
# Check if the directorys to backup and the backup destinations availible and that todays backup has not already been copied
if [ -d "$backup_src_volume" ] && [ "$backup_src" ] && [ -d "$backup_dst" ] && ! [ -f "${backup_dst}${backup_image}" ] ; then
# Carry on with the backup
touch "${primary_lock_file_name}"
echo "Backup Commencing..." | tee -ai >> "$logfile"
# Check Temporary Image is not already there
if ! [ -f "${temp_location}${backup_image}" ] ; then
# Create Encrypted Disk Image
/bin/echo -n " " >> "$logfile"
hdiutil create -srcfolder "${backup_src}" "${temp_location}${backup_image}" 2>&1 >> "$logfile"
if [ $? != 0 ] ; then
echo " WARNING! : Failed to Create Temporary Backup Disk Image" | tee -ai >> "$logfile"
fi
if ! [ -f "${temp_location}${backup_image}" ] ; then
echo " WARNING! : Unable to copy backup image to backup directory" | tee -ai >> "$logfile"
echo " File : ${temp_location}${backup_image} dose not exist" | tee -ai >> "$logfile"
else
# Perform Copy
echo " Copying up backup image to backup volume..." | tee -ai >> "$logfile"
ditto -rsrc "${temp_location}${backup_image}" "${backup_dst}${backup_image}"
if [ $? != 0 ] ; then
echo " WARNING! : Error while coping the backup image" | tee -ai >> "$logfile"
fi
# Remove Temp File
rm "${temp_location}${backup_image}"
if [ $? != 0 ] ; then
echo " WARNING! : error removing temporary disk image file." | tee -ai >> "$logfile"
else
echo " Backup Complete." | tee -ai "$logfile"
fi
fi
else
echo " ERROR! : Temporary Backup Image Exists. This backup will not complete. " | tee -ai >> "$logfile"
fi
rm "${primary_lock_file_name}"
fi
}
function open_log {
echo "#######################" >> $logfile
echo "`date`" >> $logfile
echo "" >> $logfile
}
function close_log {
echo "" >> "$logfile"
echo "" >> "$logfile"
echo "" >> "$logfile"
}
if [ "${logfile}" == "" ] ; then
logfile=/dev/null
fi
if ! [ -d "$backup_dst" ] ; then
echo " ERROR: Backup Destination Directory is not available. Backup stopped." | tee -ai "$logfile"
echo " Specified Backup Directory : $backup_dst" | tee -ai "$logfile"
close_log
exit -1
fi
day_of_the_week=`date | cut -c -3`
open_log
#if [ "${day_of_the_week}" == "Fri" ] ; then
run_backup
#fi
close_log
exit 0
