home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Source Code 1992 March
/
Source_Code_CD-ROM_Walnut_Creek_March_1992.iso
/
usenet
/
altsrcs
/
1
/
1575
< prev
next >
Wrap
Internet Message Format
|
1990-12-28
|
3KB
From: jp@hplb.hpl.hp.com (Julian Perry)
Newsgroups: alt.sources
Subject: Recursive ftp from another Unix machine....
Message-ID: <1990Jul12.155536.19483@hplb.hpl.hp.com>
Date: 12 Jul 90 15:55:36 GMT
Here's a shell script which connects to a remote machine and pulls in
(in binary mode) all files (recursively downwards) from the named
directories. It's really handy for example:
getrftp uunet.uu.net comp.sources.unix/volume14
If the ftp fails part way through it will just carry on without bothering
to transfer files it already has. It will only talk to other Unix ftp
servers.
Comments/suggestions/defects?
Jules
--
E-MAIL: jp@hplb.hpl.hp.com || jp@hpl.hp.co.uk
IN-REAL-LIFE: Julian Perry
ORGANISATION: Hewlett-Packard Laboratories, Bristol
ADDRESS: Filton Road, Stoke Gifford, Bristol, England, BS12 6QZ
TELEPHONE: +44 272 799910 x 24019
#---------------------------------- cut here ----------------------------------
# This is a shell archive. Remove anything before this line,
# then unpack it by saving it in a file and typing "sh file".
#
# Wrapped by Julian Perry <jp@hplb.hpl.hp.com> on Thu Jul 12 16:46:32 1990
#
# This archive contains:
# getrftp
#
# Existing files will not be overwritten.
# Error checking via wc(1) will be performed.
# Error checking via sum(1) will be performed.
LANG=""; export LANG
PATH=/bin:/usr/bin:$PATH; export PATH
if sum -r </dev/null >/dev/null 2>&1
then
sumopt='-r'
else
sumopt=''
fi
if test -f getrftp
then
echo Ok to overwrite existing file getrftp\?
read answer
case "$answer" in
[yY]*) echo Proceeding;;
*) echo Aborting; exit 1;;
esac
rm -f getrftp
if test -f getrftp
then
echo Error: could not remove getrftp, aborting
exit 1
fi
fi
echo x - getrftp
cat >getrftp <<'@EOF'
#!/bin/sh
#
# Script to get directories of files (recursively) from a Unix
# ftp server.
#
# Usage: getrftp <host> <dir1> [<dir2> ...]
#
# File: getrftp
# Author: Julian Perry (jp@hplb.hpl.hp.com)
# Date: 90/07/12
# Revision: 1.0
#
USER=ftp
PASSWORD=`hostname`
VERBOSE=-v
if [ $# -lt 2 ]
then
echo "usage: $0 <host> <dir1> [<dir2> ...]"
exit 1
fi
HOST=$1
ROOT=`pwd`
TMPFIL="/tmp/grftp.$$"
trap "rm -f $TMPFIL; trap '' 0; exit" 0 1 2 13 15
shift
for DIR in $*
do
ftp -v -g -i -n $HOST <<EOF
user $USER $PASSWORD
ls "-pR $DIR" $TMPFIL
quit
EOF
{
echo "user $USER $PASSWORD"
echo "binary"
CURDIR=$DIR
mkdir -p $ROOT/$CURDIR
cd $ROOT/$CURDIR
echo "lcd $ROOT/$CURDIR"
echo "cd /"
echo "cd $CURDIR"
while read line
do
if [ ! -z "$line" ]
then
case "$line" in
*:) # Found a directory
CURDIR=`echo "$line" | sed -e 's/:$//'`
mkdir -p $ROOT/$CURDIR
cd $ROOT/$CURDIR
echo "lcd $ROOT/$CURDIR"
echo "cd /"
echo "cd $CURDIR"
;;
*/) # Found a directory to be ignored
;;
*) # Found a file
if [ ! -f "$line" ]
then
echo "get $line"
fi
esac
fi
done } < $TMPFIL | ftp $VERBOSE -g -i -n $HOST
done
@EOF
set `sum $sumopt <getrftp`; if test $1 -ne 26669
then
echo ERROR: getrftp checksum is $1 should be 26669
fi
set `wc -lwc <getrftp`
if test $1$2$3 != 771991213
then
echo ERROR: wc results of getrftp are $* should be 77 199 1213
fi
chmod 755 getrftp
exit 0