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