summaryrefslogtreecommitdiffstats
path: root/rsyncd-scp.sh
diff options
context:
space:
mode:
authorFlorian Pritz <bluewind@xinu.at>2011-06-24 20:15:49 +0200
committerFlorian Pritz <bluewind@xinu.at>2011-06-24 20:15:49 +0200
commit0fa1debfd6857edf7298a2478d7c877b29645ff3 (patch)
treec2f7e87ff4e3b049f05954c9452ba0729d8317cd /rsyncd-scp.sh
parent26c3975f156e74cd52bddfce7e1e654762847d96 (diff)
downloadbin-0fa1debfd6857edf7298a2478d7c877b29645ff3.tar.gz
bin-0fa1debfd6857edf7298a2478d7c877b29645ff3.tar.xz
add rsync-scp.sh
Signed-off-by: Florian Pritz <bluewind@xinu.at>
Diffstat (limited to 'rsyncd-scp.sh')
-rwxr-xr-xrsyncd-scp.sh42
1 files changed, 42 insertions, 0 deletions
diff --git a/rsyncd-scp.sh b/rsyncd-scp.sh
new file mode 100755
index 0000000..de54a8e
--- /dev/null
+++ b/rsyncd-scp.sh
@@ -0,0 +1,42 @@
+#!/bin/bash
+
+set -e
+
+host=${1%%:*}
+path=${1#*:}
+dst=$2
+
+if [[ -z $1 || -z $2 ]]; then
+ echo "${0%%*/}: <host:src> <dst>"
+ 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 <<EOF >'"$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"
+