#!/bin/sh
# Script by Atle F. Sveen (atlefren.net)
# Share and use as you like (let me know if you make any major changes)
#----------------------------------------------------------------------
# Simple script to backup a directory as a tar.gz archive
# Requires that the backup disk is mounted
# Keeps the n most present backups 
# Returns output messages for keeping in a crontab-log
#----------------------------------------------------------------------
# Suggested crontab-entry:
# 0 *   *   *   *    /path/to/backup.sh >> /path/to/logfile
# This makes a backup every hour
#----------------------------------------------------------------------

#with this setup /home/atle/skole/9semester/prosjekt/oppgave and all subdirectories are backed up to
# /mnt/stud/backup/prosjekt-YYYYMMDD-hhmm.tar.gz to alter change variables below

# Mounted disk where backup directory resides
VOL=/mnt/stud

#path to where the directory to back up resides
local_dir="/home/atle/skole/9semester/prosjekt"

#directory to backup
backup_dir="oppgave"

#directory to store backup
backup_dest="backup"

#prefix for backup archive
prefix="prosjekt"

#number of backup files to keep 
files_to_keep=10

#housekeeping (do not delete)
day=$(date +%Y%m%d)
hour=$(date +%H%M)
dato=$(date)
filename=$VOL"/"$backup_dest"/"$prefix"-"$day"-"$hour".tar.gz"

if [ -d $VOL ] #check if directory is mounted
 then
	cd /home/atle/skole/9semester/prosjekt
	cd $local_dir
	#make archive, dump output
	tar -czf $filename oppgave/ >> /dev/null
	#return success
	echo $dato": backup successfull"
	cd $VOL"/"$backup_dest
	#start with deleting old files
	num_files=`ls | wc -l`
	num_to_delete=`expr ${num_files} - $files_to_keep` 
	if [ ${num_to_delete} -gt 0 ];then
		for i in `ls | head -n ${num_to_delete}`; do 
			rm $i 
		done
		echo $num_to_delete "file(s) deleted"
	else 
		echo "no files to delete"
	fi
else  
	#could not connect to directory, skipping backup
	echo $dato": backup failed (not connected)"
fi
