mirror of https://github.com/tLDP/LDP
112 lines
3.7 KiB
Bash
112 lines
3.7 KiB
Bash
#! /bin/sh
|
|
# $Id$
|
|
# Script to perform batch anonymous ftp. Essentially converts a list of
|
|
# of command-line arguments into input to ftp.
|
|
# ==> This script is nothing but a shell wrapper around "ftp" . . .
|
|
# Simple, and quick - written as a companion to ftplist
|
|
# -h specifies the remote host (default prep.ai.mit.edu)
|
|
# -d specifies the remote directory to cd to - you can provide a sequence
|
|
# of -d options - they will be cd'ed to in turn. If the paths are relative,
|
|
# make sure you get the sequence right. Be careful with relative paths -
|
|
# there are far too many symlinks nowadays.
|
|
# (default is the ftp login directory)
|
|
# -v turns on the verbose option of ftp, and shows all responses from the
|
|
# ftp server.
|
|
# -f remotefile[:localfile] gets the remote file into localfile
|
|
# -m pattern does an mget with the specified pattern. Remember to quote
|
|
# shell characters.
|
|
# -c does a local cd to the specified directory
|
|
# For example,
|
|
# ftpget -h expo.lcs.mit.edu -d contrib -f xplaces.shar:xplaces.sh \
|
|
# -d ../pub/R3/fixes -c ~/fixes -m 'fix*'
|
|
# will get xplaces.shar from ~ftp/contrib on expo.lcs.mit.edu, and put it
|
|
# in xplaces.sh in the current working directory, and get all fixes from
|
|
# ~ftp/pub/R3/fixes and put them in the ~/fixes directory.
|
|
# Obviously, the sequence of the options is important, since the equivalent
|
|
# commands are executed by ftp in corresponding order
|
|
#
|
|
# Mark Moraes <moraes@csri.toronto.edu>, Feb 1, 1989
|
|
#
|
|
|
|
|
|
# ==> These comments added by author of this document.
|
|
|
|
# PATH=/local/bin:/usr/ucb:/usr/bin:/bin
|
|
# export PATH
|
|
# ==> Above 2 lines from original script probably superfluous.
|
|
|
|
E_BADARGS=65
|
|
|
|
TMPFILE=/tmp/ftp.$$
|
|
# ==> Creates temp file, using process id of script ($$)
|
|
# ==> to construct filename.
|
|
|
|
SITE=`domainname`.toronto.edu
|
|
# ==> 'domainname' similar to 'hostname'
|
|
# ==> May rewrite this to parameterize this for general use.
|
|
|
|
usage="Usage: $0 [-h remotehost] [-d remotedirectory]... \
|
|
[-f remfile:localfile]... [-c localdirectory] [-m filepattern] [-v]"
|
|
ftpflags="-i -n"
|
|
verbflag=
|
|
set -f # So we can use globbing in -m
|
|
set x `getopt vh:d:c:m:f: $*`
|
|
if [ $? != 0 ]; then
|
|
echo $usage
|
|
exit $E_BADARGS
|
|
fi
|
|
shift
|
|
trap 'rm -f ${TMPFILE} ; exit' 0 1 2 3 15
|
|
# ==> Signals: HUP INT (Ctl-C) QUIT TERM
|
|
# ==> Delete tempfile in case of abnormal exit from script.
|
|
echo "user anonymous ${USER-gnu}@${SITE} > ${TMPFILE}"
|
|
# ==> Added quotes (recommended in complex echoes).
|
|
echo binary >> ${TMPFILE}
|
|
for i in $* # ==> Parse command-line args.
|
|
do
|
|
case $i in
|
|
-v) verbflag=-v; echo hash >> ${TMPFILE}; shift;;
|
|
-h) remhost=$2; shift 2;;
|
|
-d) echo cd $2 >> ${TMPFILE};
|
|
if [ x${verbflag} != x ]; then
|
|
echo pwd >> ${TMPFILE};
|
|
fi;
|
|
shift 2;;
|
|
-c) echo lcd $2 >> ${TMPFILE}; shift 2;;
|
|
-m) echo mget "$2" >> ${TMPFILE}; shift 2;;
|
|
-f) f1=`expr "$2" : "\([^:]*\).*"`; f2=`expr "$2" : "[^:]*:\(.*\)"`;
|
|
echo get ${f1} ${f2} >> ${TMPFILE}; shift 2;;
|
|
--) shift; break;;
|
|
esac
|
|
# ==> 'lcd' and 'mget' are ftp commands. See "man ftp" . . .
|
|
done
|
|
if [ $# -ne 0 ]; then
|
|
echo $usage
|
|
exit $E_BADARGS
|
|
# ==> Changed from "exit 2" to conform with style standard.
|
|
fi
|
|
if [ x${verbflag} != x ]; then
|
|
ftpflags="${ftpflags} -v"
|
|
fi
|
|
if [ x${remhost} = x ]; then
|
|
remhost=prep.ai.mit.edu
|
|
# ==> Change to match appropriate ftp site.
|
|
fi
|
|
echo quit >> ${TMPFILE}
|
|
# ==> All commands saved in tempfile.
|
|
|
|
ftp ${ftpflags} ${remhost} < ${TMPFILE}
|
|
# ==> Now, tempfile batch processed by ftp.
|
|
|
|
rm -f ${TMPFILE}
|
|
# ==> Finally, tempfile deleted (you may wish to copy it to a logfile).
|
|
|
|
|
|
# ==> Exercises:
|
|
# ==> ---------
|
|
# ==> 1) Add error checking.
|
|
# ==> 2) Add bells & whistles.
|
|
|
|
# See the included file "Moraes-COPYRIGHT" for copyright info.
|
|
#+ on this script.
|