#!/bin/bash set -e host=${1%%:*} path=${1#*:} dst=$2 if [[ -z $1 || -z $2 ]]; then echo "${0##*/}: " exit 0 fi while :; do port=$RANDOM [[ $port -gt 1024 && $port -lt 65535 ]] && break done rm_tmpdir=$(ssh $host 'mktemp -d /tmp/rsyncd-scp.XXXXXX') cleanup() { ssh $host "kill \`<'$rm_tmpdir/pid'\`" &>/dev/null || true ssh $host "rm -rf $rm_tmpdir" } trap cleanup EXIT INT TERM ssh $host 'cat <'"$rm_tmpdir"'/rsyncd.conf max connections = 1 pid file = '"$rm_tmpdir"'/pid lock file = '"$rm_tmpdir"'/lock use chroot = no log file = /dev/null port = '$port' [share] path = '"$path"' EOF rsync --daemon --config='"$rm_tmpdir"'/rsyncd.conf; ' rsync --progress --port $port "rsync://$host/share/" -rt "$dst"