From RdiffBackupWiki
#!/bin/bash
# Drop this file into /etc/cron.daily/
#Server Configuration:
# /etc/rdiff-backup.conf
# BACKUPDIR=local location where to place the backups
# SSH_KEY=path to a passwortless ssh key which will be used to login into other machines
# MAXAGE=default age for backups
# LOGCMD= ususally "logger -p user.notice -t rdiff-backup[$$]"
#
# /etc/rdiff-backup.hosts
# lines containing:
# <name> <location> <age>
# name is the name appended to $BACKUPDIR and use to identify the backup
# location is a rdiff-backup format description of the source location
# age is optional and gives the time for how long backups are kept else $MAXAGE is taken as default
# a leading # disables the line (comment)
#
# /etc/rdiff-backup.inc.$name
# rdiff-backup formatted include-globlist used when backung up $name
#Client Configuration:
# following paths are searched for global include-globlists
# /rdiff-backup.inc
# /.rdiff-backup.inc
# /etc/rdiff-backup.inc
#
# following parts are searched for local include-globlists (apply only to subdirs)
# /home/*/.rdiff-backup.inc
# /home/*/*/.rdiff-backup.inc
if test -f /etc/rdiff-backup.conf; then
source /etc/rdiff-backup.conf
else
echo "missing /etc/rdiff-backup.conf"
exit 125
fi
eval $(ssh-agent)
ssh-add $SSH_KEY
cat /etc/rdiff-backup.hosts |\
while read name location maxage; do
test "${name:0:1}" = '#' && continue
echo "Backing up $name from $location" | $LOGCMD
TMP=$(tempfile)
nice rdiff-backup --check-destination-dir $BACKUPDIR/$name/ 2>&1 |\
$LOGCMD
nice rdiff-backup --remove-older-than ${maxage:-$MAXAGE} --force $BACKUPDIR/$name/ 2>&1 |\
$LOGCMD
(
echo "- $BACKUPDIR"
echo "+ /rdiff-backup.inc"
echo "+ /.rdiff-backup.inc"
echo "+ /etc/rdiff-backup.inc"
echo "+ /home/*/.rdiff-backup.inc"
echo "+ /home/*/*/.rdiff-backup.inc"
test -f "/etc/rdiff-backup.inc.$name" && cat "/etc/rdiff-backup.inc.$name"
test -f "$BACKUPDIR/$name/rdiff-backup.inc" && cat "$BACKUPDIR/$name/rdiff-backup.inc"
test -f "$BACKUPDIR/$name/.rdiff-backup.inc" && cat "$BACKUPDIR/$name/.rdiff-backup.inc"
test -f "$BACKUPDIR/$name/etc/rdiff-backup.inc" && cat "$BACKUPDIR/$name/etc/rdiff-backup.inc"
for i in $BACKUPDIR/$name/home/*/.rdiff-backup.inc; do
test "$i" = "$BACKUPDIR/$name/home/*/.rdiff-backup.inc" && break
dirname="$(dirname $i)"
dirname="${dirname#$BACKUPDIR/$name}"
sed -e 's|^\([+-] \)\?\(.\+\)$|\1'${dirname}'/\2|' -e '/^$/d' -e '/\.\./d' <$i
done
for i in $BACKUPDIR/$name/home/*/*/.rdiff-backup.inc; do
test "$i" = "$BACKUPDIR/$name/home/*/*/.rdiff-backup.inc" && break
dirname="$(dirname $i)"
dirname="${dirname#$BACKUPDIR/$name}"
sed -e 's|^\([+-] \)\?\(.\+\)$|\1'${dirname}'/\2|' -e '/^$/d' -e '/\.\./d' <$i
done
) >$TMP
nice rdiff-backup -b --include-globbing-filelist $TMP --exclude '*' $location $BACKUPDIR/$name/ 2>&1 |\
$LOGCMD
nice rdiff-backup --list-increments $BACKUPDIR/$name/ 2>&1 |\
$LOGCMD
rm $TMP
done
eval $(ssh-agent -k)