Created
December 19, 2012 17:09
-
-
Save anonymous/4338394 to your computer and use it in GitHub Desktop.
A nice backup script fork.
Forked from
http://code.google.com/p/kamila-various-stuff/
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# incrementally backup $HOME using rsync | |
SOURCE="$HOME/" | |
DEST="/media/Dragis_HDD/homebackup/" | |
KEEP=5 # how many backups besides the current one should be kept | |
EXCLUDEFROM="$SOURCE/.backup_excludes" | |
NICENESS=10 | |
LOGFILE="$DEST/.lastbackup.log" | |
RSYNC_OPTS="-rltHh" | |
if [[ $1 != '-q' ]]; then | |
RSYNC_OPTS="--verbose $RSYNC_OPTS" | |
fi | |
if [[ -d "$DEST" ]]; then | |
[[ $1 != '-q' ]] && echo "Backing up $SOURCE to $DEST..." | |
# remove oldest backup if necessary | |
if [[ `ls -d -1 $DEST/backup-* | wc -l` > $KEEP ]]; then | |
[[ $1 != '-q' ]] && echo "Removing stale stuff..." | |
rm -rf `ls -d -1 $DEST/backup-* | sort -n | head -n1`; | |
fi | |
rm -f $DEST/current # <- symlink to the newest backup | |
NEWEST="`ls -d -1 $DEST/backup-* | sort -n | tail -n1`" | |
CURRENT="$DEST/backup-`date +%Y-%m-%d-%H-%M`/" | |
nice -n $NICENESS rsync $RSYNC_OPTS --delete --delete-excluded \ | |
--exclude-from=$EXCLUDEFROM --exclude='.*' --progress \ | |
--numeric-ids --link-dest=$NEWEST $SOURCE $CURRENT 2> $LOGFILE | |
if [ -s $LOGFILE ]; then | |
echo "Backup of $SOURCE did not finish successfully. Review the \ | |
log file (${LOGFILE}) to see what went wrong." >&2 | |
echo "Deleting this partial backup in 5 seconds... Press \ | |
Ctrl-C to abort." >&2 | |
for i in `seq 5 -1 1`; do | |
echo -n "$i " >&2 | |
sleep 1 | |
done | |
echo >&2 # a happy newline | |
rm -rf $CURRENT | |
exit 127 | |
else | |
ln -s $CURRENT $DEST/current | |
[[ $1 != '-q' ]] && echo "Backup of $SOURCE finished! Woohoo!" | |
fi | |
# also sync music between home and disk if not included in this backup | |
[[ -n `cat $EXCLUDEFROM | grep '\<Music\>'` ]] && syncmusic.sh $1 | |
else | |
echo "A backup was scheduled, but $DEST was not found. Please insert the \ | |
disk and run `basename $0`." >&2 | |
exit 1 | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment