kyanite.sh (raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
#!/bin/sh helpme() { echo "usage:" echo " kyanite.sh full|partial|restore SRC DEST [options]" echo " COMMANDS:" echo " full: make a full backup of SRC to DEST/HOST/TIMESTAMP_full/" echo " this can be a remote path in user@host:path form too" echo " partial: make partial backup of SRC to DEST/HOST/TIMESTAMP_part/" echo " relative to the latest full backup in that directory" echo " restore: restore the backup at DEST/ to SRC/" echo " OPTIONS:" echo " anything provided after DEST is passed as additional options to rsync," echo " e.g. '--exclude .cache'" } if [ -z "$3" ]; then helpme; exit; fi if [ "$1" = "full" ]; then mode=full; elif [ "$1" = "partial" ]; then mode=part; elif [ "$1" = "restore" ]; then mode=restore; else mode=none; fi shift; srcDir=$1; shift; destDir=$1 remoteHost=$(echo $destDir | awk -F : '{ print $1 }' | awk -F @ '{ print $2 }'); if [ ! -z "${remoteHost}" ]; then host=${remoteHost}; else host=$(hostname) fi shift; case $mode in full) fullDest=${destDir}/${host}/$(date +%Y-%m-%d_%H:%M)_full; mkdir -p ${fullDest}; rsync -av $@ ${srcDir} ${fullDest}; ;; part) fullDest=${destDir}/${host}/$(date +%Y-%m-%d_%H:%M)_part; lastFullBackup=$(ls -1 ${destDir}/$(hostname)/*_full | tail -n 1); mkdir -p ${fullDest}; rsync -av --link-dest=${lastFullBackup} $@ ${srcDir} ${fullDest}; ;; restore) rsync -av $@ ${srcDir} ${destDir} ;; *) helpme ;; esac |