Add a vdn-rsync command
This commit is contained in:
50
bin/vdn-rsync
Executable file
50
bin/vdn-rsync
Executable file
@@ -0,0 +1,50 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -eu
|
||||
|
||||
VDN_PATH=$(readlink -f $(dirname $(command -v vdn))/..)
|
||||
. $VDN_PATH/bin/functions.sh
|
||||
GUEST_OWNER=$USER
|
||||
|
||||
rewrite_connection() {
|
||||
if [[ $1 != *:* ]]; then
|
||||
connection="$1"
|
||||
else
|
||||
connection=${1%:*}
|
||||
local path=${1#*:}
|
||||
local user=${connection%@*}
|
||||
guest=${connection#*@}
|
||||
connection="${user}@localhost:${path}"
|
||||
fi
|
||||
}
|
||||
|
||||
determine_redir_port() {
|
||||
local redirs="$TMPDIR/vdn-$guest-${GUEST_OWNER}-redirs"
|
||||
[[ ! -e $redirs ]] && error "Impossible de joindre $guest"
|
||||
sshRedirPort=$(awk -F ':' '$1 == "tcp" && $3 == "22" {print $2}' "$redirs")
|
||||
[[ -n $sshRedirPort ]] || error "Aucune redirection vers le port 22 du système $guest"
|
||||
}
|
||||
|
||||
declare -a options=()
|
||||
declare -a srcs=()
|
||||
dest=''
|
||||
guest=''
|
||||
while [[ $# -ne 0 ]]; do
|
||||
if [[ $1 == -* ]]; then
|
||||
options+=("$1")
|
||||
elif [[ $# -ne 1 ]]; then
|
||||
rewrite_connection "$1"
|
||||
options+=("$connection")
|
||||
else
|
||||
rewrite_connection "$1"
|
||||
dest="$connection"
|
||||
fi
|
||||
shift
|
||||
done
|
||||
|
||||
if [[ $guest ]]; then
|
||||
determine_redir_port
|
||||
else
|
||||
error 'Utiliser rsync directement'
|
||||
fi
|
||||
rsync "${options[@]}" -e "ssh -g -p $sshRedirPort" "${srcs[@]}" "$dest"
|
Reference in New Issue
Block a user