[net.sources] Multiple machine rcp script for 4.2BSD

chris@umcp-cs.UUCP (Chris Torek) (03/31/85)

This shell script can come in handy for updating files on multiple
machines in 4.2BSD networked environments.  It's no substitute for a
real remote file system, but it gets the job done . . . .  All you need
to do to it is edit the default list of machines.

#! /bin/sh
#
# rrcp - do a complete rcp (to all local machines)
# 30 March 1985, Chris Torek, University of Maryland
# hacked up from Bruce Israel's original version
# This code is careful not to invoke extra programs for non-sysV "sh"s

usage='echo "usage: $0 [-h hosts] f1 [f2] (copy f1 to f2)
   or: $0 [-h hosts] f1 f2 ... fn dir (copy files to directory)" 1>&2; exit 1'
hosts="mimsy tove gymble gyre"

case "$1" in
-h)	hosts="$2"; shift 2;;
esac

case $# in
0)	eval "$usage";;
1)	from="$1"; to="$1"; type=normal;;
*)	eval "dir=\"$`echo $#`\""	# effectively, dir = $($#)
	if [ -d "$dir" ]; then
		type=directory
	else
		case $# in
		2)	from="$1"; to="$2"; type=normal;;
		*)	eval "$usage";;
		esac
	fi;;
esac

# Have established credentials of given arguments.  Now make a temporary
# copy of the original file (so that, e.g., "rcp mimsy:xyzzy mimsy:xyzzy"
# never happens, since that makes rcp clobber the file), then send it
# around.
temp=/tmp/rrcp.$$
trap 'rm -f $temp; exit' 0 1 2 3 15
case $type in
normal)
	rcp "$from" $temp
	for machine in $hosts; do
		echo "rcp $from $machine:$to"
		rcp $temp "$machine:$to"
	done;;
directory)
	for from in "$@"; do
		case $# in
		1)	;;
		*)	rcp "$from" $temp
			for machine in $hosts; do
				echo "rcp $from $machine:$dir"
				rcp $temp "$machine:$dir"
			done;;
		esac
		shift
	done;;
*)
	echo "BUG: type=$type" 1>&2; exit 1;;
esac
-- 
In-Real-Life: Chris Torek, Univ of MD Comp Sci Dept (+1 301 454 4251)
UUCP:	{seismo,allegra,brl-bmd}!umcp-cs!chris
CSNet:	chris@umcp-cs		ARPA:	chris@maryland