Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37048363
en ru br
Репозитории ALT
S:9.4p1-alt1
5.1: 5.3p1-alt1
4.1: 5.0p1-alt3
4.0: 5.0p1-alt3
+updates:4.7p1-alt1
3.0: 3.6.1p2-alt6
www.altlinux.org/Changes

Группа :: Сети/Удалённый доступ
Пакет: openssh

 Главная   Изменения   Спек   Патчи   Исходники   Загрузить   Gear   Bugs and FR  Repocop 

#!/bin/sh -e

# Rescp - secure copy with reget. Command line syntax is similar to scp.
# Copyright (c) 1997 by Solar Designer
# Modifications by Dmitry V. Levin <ldv@fandra.org>, 1998-2000

PROG="$(basename "$0")"

function usage() {
RETVAL=$?
echo "Usage: $PROG [options] [user@]host:file file"
if [ -n "$1" ]; then
exit "$1"
else
exit $RETVAL
fi
}

VERBOSE=
while getopts "CP:c:i:o:vV" OPT; do
[ "$OPT" != "?" ] || usage 0

case "$OPT" in
P)
OPT="p"
;;
V)
VERBOSE=1
;;
v)
VERBOSE=1
OPTS="$OPTS -$OPT"
;;
*)
OPTS="$OPTS -$OPT"
if [ -n "$OPTARG" ]; then
OPTS="$OPTS $OPTARG"
fi
;;
esac
done

[ $OPTIND -eq $[$#-1] ] || usage

shift $[$OPTIND-1]

USER="$(echo "$1" |sed -n "s/@.*//p")"
HOST="$(echo "$1" |sed -ne "s/[^@]*@//" -e "s/:.*//p")"
R_FILE="$(echo "$1" |sed -n "s/[^:]*://p")"

[ -n "$USER" ] || USER="$LOGNAME"

[ -n "$HOST" -a -n "$R_FILE" ] || usage

if [ -d "$2" ]; then
L_FILE="$2/$(basename $R_FILE)"
else
L_FILE="$2"
fi

if [ ! -f "$L_FILE" -o ! -r "$L_FILE" -o ! -w "$L_FILE" ]; then
echo "$PROG: Destination file should exist and be both readable and writable"
exit 1
fi

SIZE=$[$(wc -c "$L_FILE" |sed -e "s/[ ]*//" -e "s/ .*//") / 1024]

echo "$PROG: Restarting at $[$SIZE * 1024]"

: ${SSH:=ssh}
"$SSH" -a -x $OPTS -l "$USER" "$HOST" \
"dd if=$R_FILE bs=1k count=$SIZE 2>>/dev/null |md5sum;" \
"dd if=$R_FILE bs=1k skip=$SIZE count=1024k 2>>/dev/null" |
(
if read; then
L_SUM="$(dd if="$L_FILE" bs=1k count=$SIZE 2>>/dev/null |md5sum |sed -n "s/ .*//p")"
R_SUM="$(echo "$REPLY" |sed -n "s/ .*//p")"

if [ "$L_SUM" != "$R_SUM" ]; then
echo "$PROG: Checksum doesn't match"
exit 1
fi
if [ -n "$VERBOSE" ]; then
echo "$PROG: Received checksum"
fi
else
echo "$PROG: No checksum received"
exit 1
fi

dd of="$L_FILE" bs=1k seek=$SIZE count=1024k 2>>/dev/null
)

RETVAL=$?

if [ -n "$VERBOSE" ]; then
NEW_SIZE=$[$(wc -c "$L_FILE" |sed -e "s/[ ]*//" -e "s/ .*//") / 1024]
echo "$PROG: Received $[NEW_SIZE-SIZE]k"
fi

exit $RETVAL
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin