Опубликовано Bash в Ср, 23/12/2009 — 21:13
Пример 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 (<a href=»mailto:moraes@csri.toronto.edu»>moraes@csri.toronto.edu</a>), 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) Добавьте уведомление звуковым сигналом.
- Страница для печати
- 11862 просмотра