====== rsync ======
===== get changes to separate dir =====
Option ''--compare-dest'' also compare destination files relative to DIR.
> If DIR is a relative path, it is relative to the destination directory
So to restore changes between remote DST and current folder ''.'' but save
restored files in ''_RESTORED_BACKUP'' folder:
rsync --dry-run -v -ra -P -i --compare-dest=.. ${DSTHOST}:/backup/ _RESTORED_BACKUP
===== print why =====
rsync want to transfer - add ''-i'' option (''--itemize-changes''). Usefull also with ''-n'' ''--dry-run''.
===== between two remotes =====
Rsync cannot work with two remotes. As workaround SSH tunnel to remote host is created and rsync is spawned locally on src host.
[[https://unix.stackexchange.com/questions/183504/how-to-rsync-files-between-two-remotes|How to rsync files between two remotes?]]
#!/bin/bash -eux
SOURCE_USER=root
SOURCE_HOST=192.168.179.2
SOURCE_PATH="/public/image.iso"
TARGET_USER=root
TARGET_HOST=pve5
TARGET_PATH=/mnt/pve/cephfs/template/iso/
# Escape characters:
SOURCE_PATH=$(printf %q "$SOURCE_PATH")
TARGET_PATH=$(printf %s "$TARGET_PATH")
OPTS="--recursive --times --partial --progress --verbose --update --archive --stats"
OPTS="${OPTS} --bwlimit=400"
OPTS="${OPTS} --compress --compress-level=9"
# Test connection to accept remote host key
ssh -l $TARGET_USER -A -R localhost:22000:$TARGET_HOST:22 $SOURCE_USER@$SOURCE_HOST "ssh localhost -p 22000 -l root whoami"
ssh -l $TARGET_USER -A -R localhost:22000:$TARGET_HOST:22 \
$SOURCE_USER@$SOURCE_HOST "rsync -e 'ssh -p 22000' ${OPTS} \
${SOURCE_PATH} \
$TARGET_USER@localhost:${TARGET_PATH}"