Книга: Искусство программирования на языке сценариев командной оболочки

Пример A-14. ftpget: Скачивание файлов по ftp

Пример A-14. ftpget: Скачивание файлов по ftp

#! /bin/sh

# $Id: ftpget,v 1.2 91/05/07 21:15:43 moraes Exp $

# Сценарий устанавливает анонимное соединение с ftp-сервером.

# Простой и быстрый - написан как дополнение к ftplist

# -h -- удаленный сервер (по-умолчанию prep.ai.mit.edu)

# -d -- каталог на сервере - вы можете указать последовательность из нескольких ключей -d

# Если вы используете относительные пути,

# будьте внимательны при задании последовательности.

# (по-умолчанию -- каталог пользователя ftp)

# -v -- "многословный" режим, будет показывать все ответы ftp-сервера

# -f -- file[:localfile] скачивает удаленный file и записывает под именем localfile

# -m -- шаблон для mget. Не забудьте взять в кавычки!

# -c -- локальный каталог

# Например,

# ftpget -h expo.lcs.mit.edu -d contrib -f xplaces.shar:xplaces.sh

# -d ../pub/R3/fixes -c ~/fixes -m 'fix*'

# Эта команда загрузит файл xplaces.shar из ~ftp/contrib с expo.lcs.mit.edu

# и сохранит под именем xplaces.sh в текущем каталоге, затем заберет все исправления (fixes)

# из ~ftp/pub/R3/fixes и поместит их в каталог ~/fixes.

# Очевидно, что последовательность ключей и аргументов очень важна, поскольку

# она определяет последовательность операций, выполняемых с удаленным ftp-сервером

#

# Mark Moraes ([email protected]), Feb 1, 1989

#

# ==> Эти комментарии добавлены автором документа.

# PATH=/local/bin:/usr/ucb:/usr/bin:/bin

# export PATH

# ==> Первые две строки в оригинальном сценарии вероятно излишни.

TMPFILE=/tmp/ftp.$$

# ==> Создан временный файл

SITE=`domainname`.toronto.edu

# ==> 'domainname' подобен 'hostname'

usage="Порядок использования: $0 [-h удаленный_сервер] [-d удаленный_каталог]... [-f удаленный_файл:локальный_файл]...

[-c локальный_каталог] [-m шаблон_имен_файлов] [-v]"

ftpflags="-i -n"

verbflag=

set -f # разрешить подстановку имен файлов (globbing) для опции -m

set x `getopt vh:d:c:m:f: $*`

if [ $? != 0 ]; then

echo $usage

exit 65

fi

shift

trap 'rm -f ${TMPFILE} ; exit' 0 1 2 3 15

echo "user anonymous ${USER-gnu}@${SITE} > ${TMPFILE}"

# ==> Добавлены кавычки (рекомендуется).

echo binary >> ${TMPFILE}

for i in $* # ==> Разбор командной строки.

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

done

if [ $# -ne 0 ]; then

echo $usage

exit 65 # ==> В оригинале было "exit 2", изменено в соответствии со стандартами.

fi

if [ x${verbflag} != x ]; then

ftpflags="${ftpflags} -v"

fi

if [ x${remhost} = x ]; then

remhost=prep.ai.mit.edu

# ==> Здесь можете указать свой ftp-сервер по-умолчанию.

fi

echo quit >> ${TMPFILE}

# ==> Все команды сохранены во временном файле.

ftp ${ftpflags} ${remhost} < ${TMPFILE}

# ==> Теперь обработать пакетный файл.

rm -f ${TMPFILE}

# ==> В заключение, удалить временный файл (можно скопировать его в системный журнал).

# ==> Упражнения:

# ==> ----------

# ==> 1) Добавьте обработку ошибок.

# ==> 2) Добавьте уведомление звуковым сигналом.

Оглавление книги


Генерация: 1.169. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз