#!/bin/bash #Copyright 2002 William Stearns #Released under the GPL. RMVersion='0.2' echo "Rsync mirror version $RMVersion" #--numeric-ids, -H, -v and -R can be added as additional params ConfFile='/etc/rsync-mirror.conf' until [ -z "$1" ]; do case "$1" in -c|-C) if [ -z "$2" ]; then echo Missing config file name, exiting >&2 exit 1 elif [ ! -e "$2" ]; then echo "Nonexistant config file \"$2\", exiting" >&2 exit 1 fi ConfFile="$2" shift 2 ;; -r|-R) echo "Operating in reverse mode, source and destination fields will be swapped." Reverse="yes" shift ;; *) echo "Unrecognized parameter \"$1\", exiting." >&2 exit 1 ;; esac done if [ ! -r "$ConfFile" ]; then echo Missing or unreadable configuration file "$ConfFile". Exiting. exit 1 fi #Two less-thans is correct, really. exec 5<&0 < <(cat "$ConfFile" | sed -e 's/#.*//' | grep -v '^$' ) while read Source Target AdditionalParams ; do if [ "$Reverse" = "yes" ]; then #FIXME - both source and dest need to be single (*/) directories or single files for reverse mode. Temp="$Source" Source="$Target" Target="$Temp" fi case "$Source" in */) echo Mirroring directory "$Source" to "$Target" rsync -e ssh -a --delete --delete-after $AdditionalParams $Source $Target ;; *) echo Mirroring "$Source" to "$Target" rsync -e ssh -a --delete --delete-after $AdditionalParams $Source $Target ;; esac done exec 0<&5 5<&-