#!/bin/bash # # TODO start this using crontab # # backuphome=/home/maxim/backup dayshome=$backuphome/days ziphome=$backuphome/zips backupcycle=14 excludes=$backuphome/excludes folders=$backuphome/folders defaultservername=backup datefilename=`date +%Y%m%d-%H%M%S` $backuphome/runbefore.sh if [ -d "$dayshome/$backupcycle" ] then echo "delete all backups" for ((i=1; $i<=$backupcycle; i++)) do rm -Rf "$dayshome/$i" done fi if [ -d "$dayshome/1" ] then echo "making incremental backup" #look for last backup day for ((i=1; $i<=$backupcycle; i++)) do #echo "$i" if [ -d "$dayshome/$i" ] then : else lastday=$((i-1)) currentday=$i break fi done echo "last day is $lastday current day is $currentday" while read folder do echo "fetching folder $folder" folderpath="$(echo $folder | cut -d: -f2)" servername="$(echo $folder | cut -d: -f1)" if [ $folderpath == $servername ] then servername=$defaultservername else servername="$(echo $servername | cut -d@ -f2)" fi mkdir -p "$dayshome/$currentday/$servername$folderpath" rsync -az --delete-excluded --exclude-from=$excludes --link-dest="$dayshome/$lastday/$servername$folderpath" $folder/ "$dayshome/$currentday/$servername$folderpath" done < $folders #remove old differential backup rm -Rf "$dayshome/diff/" #making incremental backup director rsync -az --compare-dest="$dayshome/$lastday/" "$dayshome/$currentday/" "$dayshome/diff/" #creating file arhive for incremental backup find "$dayshome/diff/" -type d | tac | xargs rmdir 2> /dev/null cd "$dayshome/diff/" arfilename="$ziphome/$datefilename-dif$currentday.tgz" echo "creating $arfilename" tar -czf $arfilename . else echo "making full backup" while read folder do echo "fetching folder $folder" folderpath="$(echo $folder | cut -d: -f2)" servername="$(echo $folder | cut -d: -f1)" if [ $folderpath == $servername ] then servername=$defaultservername else servername="$(echo $servername | cut -d@ -f2)" fi mkdir -p "$dayshome/1/$servername$folderpath" rsync -az --delete-excluded --exclude-from=$excludes $folder/ "$dayshome/1/$servername$folderpath" echo "path is $folderpath server is $servername" done < $folders cd "$dayshome/1/" arfilename="$ziphome/$datefilename-full.tgz" echo "creating $arfilename" tar -czf $arfilename . fi