77 lines
1.4 KiB
Plaintext
77 lines
1.4 KiB
Plaintext
: Copy a file from any machine to any other machine.
|
|
usage="Usage: $0 [machine!]from-file [machine!]to-file"
|
|
PATH=/usr/local:/bin:/usr/bin
|
|
CDPATH=
|
|
case $# in
|
|
2) :
|
|
;;
|
|
*) echo "$usage" 1>&2
|
|
exit 1
|
|
esac
|
|
from=$1 to=$2
|
|
case $from in
|
|
*!*) IFS="!"
|
|
set $from
|
|
case $# in
|
|
2) from_mach=$1 from_file=$2 IFS=" "
|
|
;;
|
|
*) echo "$usage" 1>&2
|
|
exit 1
|
|
esac
|
|
;;
|
|
*) from_file=$from
|
|
esac
|
|
case "$from_file" in
|
|
"") echo "$usage" 1>&2
|
|
exit 1
|
|
esac
|
|
case $to in
|
|
*!*) IFS="!"
|
|
set $to
|
|
case $# in
|
|
2) to_mach=$1 to_file=$2 IFS=" "
|
|
;;
|
|
*) echo "$usage" 1>&2
|
|
exit 1
|
|
esac
|
|
;;
|
|
*) to_file=$to
|
|
esac
|
|
case "$to_file" in
|
|
"") echo "$usage" 1>&2
|
|
exit 1
|
|
esac
|
|
case "$from_mach" in
|
|
"$to_mach")
|
|
: machines equal
|
|
case "$to_mach" in
|
|
"") : local
|
|
cp "$from_file" "$to_file"
|
|
;;
|
|
*) : remote
|
|
rsh "$to_mach" "cp $from_file $to_file"
|
|
;;
|
|
esac
|
|
;;
|
|
*) : machines not equal
|
|
case "$to_mach" in
|
|
"") : to local
|
|
if test -d "$to_file"
|
|
then rsh -e "$from_mach" "cat $from_file" >"$to_file/`basename $from_file`"
|
|
else rsh -e "$from_mach" "cat $from_file" >"$to_file"
|
|
fi
|
|
;;
|
|
*) : to remote
|
|
case "$from_mach" in
|
|
"") : from local
|
|
rsh -i "$to_mach" "if test -d $to_file; then cat >$to_file/`basename $from_file`; else cat >$to_file; fi" <"$from_file"
|
|
;;
|
|
*) : from remote
|
|
rsh -e "$from_mach" "cat $from_file" | rsh -i "$to_mach" "if test -d $to_file; then cat >$to_file/`basename $from_file`; else cat >$to_file; fi"
|
|
;;
|
|
esac
|
|
;;
|
|
esac
|
|
;;
|
|
esac
|