]> arthur.barton.de Git - backup-script.git/blobdiff - bin/backup-script
Detect rsync and its protocol version
[backup-script.git] / bin / backup-script
index fb9fee4b500f7bc0b9f1db24979d1c0197022805..670f6991fbd30c2b903e8cab55997d1967db8067 100755 (executable)
@@ -298,12 +298,25 @@ while [ $# -gt 0 ]; do
        esac
 done
 
-trap GotSignal SIGINT
-
 echo -n "Started: "; date
 echo -e $config_info
+
+# Check rsync and its protocol version
+rsync=$(which "rsync" 2>/dev/null)
+if [ $? -ne 0 ]; then
+       echo "Failed to detect rsync(1)! Is it installed in your \$PATH?"
+       exit 1
+fi
+rsync_proto=$($rsync --version 2>/dev/null | head -n 1 | sed 's/.*  protocol version \([0-9]*\)$/\1/')
+if [ $? -ne 0 ]; then
+       echo "Failed to detect protocol version of $rsync!"
+       exit 1
+fi
+echo "Rsync command is $rsync, protocol version $rsync_proto."
 echo
 
+trap GotSignal SIGINT
+
 if [ $# -ge 1 ]; then
        for s in "$@"; do
                if [ ! -r "${conf_d}/$s" ]; then
@@ -525,16 +538,27 @@ for f in $sys; do
        fi
 
        # prepare (remote) command ...
-       cmd="rsync --archive"
+       cmd="$rsync --archive"
        [ "$compress" -ne 0 ] && cmd="$cmd --compress"
        [ "$local" -eq 0 ] && cmd="$cmd --rsh=\"$ssh_cmd\""
        cmd="$cmd --delete --delete-excluded --sparse"
        [ "$VERBOSE" -gt 0 ] && cmd="$cmd --progress"
        if [ "$source_root" = "$default_source_root" ]; then
-               cmd="$cmd --exclude=/dev --exclude=/proc --exclude=/sys"
-               cmd="$cmd --exclude=/run --exclude=/tmp --exclude=/var/tmp"
-               cmd="$cmd --exclude=/media --exclude=/mnt --exclude=/net"
-               cmd="$cmd --exclude=/var/cache/apt --exclude=/var/log"
+               for dir in \
+                       "/dev/**" \
+                       "/media/**" \
+                       "/mnt/**" \
+                       "/net/**" \
+                       "/proc/**" \
+                       "/run/**" \
+                       "/sys/**" \
+                       "/tmp/**" \
+                       "/var/cache/apt/**" \
+                       "/var/log/**" \
+                       "/var/tmp/**" \
+               ; do
+                       cmd="$cmd --exclude=$dir"
+               done
        fi
        [ -n "$exclude_args_add" ] && cmd="$cmd $exclude_args_add"
        for dir in $exclude_dirs_add; do