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

Опубликовано Bash в Ср, 23/12/2009 — 21:13

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

  1. #! /bin/sh
  2. # $Id: ftpget,v 1.2 91/05/07 21:15:43 moraes Exp $
  3. # Сценарий устанавливает анонимное соединение с ftp-сервером.
  4. # Простой и быстрый — написан как дополнение к ftplist
  5. # -h — удаленный сервер (по-умолчанию prep.ai.mit.edu)
  6. # -d — каталог на сервере — вы можете указать последовательность из нескольких ключей -d
  7. # Если вы используете относительные пути,
  8. # будьте внимательны при задании последовательности.
  9. # (по-умолчанию — каталог пользователя ftp)
  10. # -v — «многословный» режим, будет показывать все ответы ftp-сервера
  11. # -f — file[:localfile] скачивает удаленный file и записывает под именем localfile
  12. # -m — шаблон для mget. Не забудьте взять в кавычки!
  13. # -c — локальный каталог
  14. # Например,
  15. #       ftpget -h expo.lcs.mit.edu -d contrib -f xplaces.shar:xplaces.sh \
  16. #               -d ../pub/R3/fixes -c ~/fixes -m ‘fix*’
  17. # Эта команда загрузит файл xplaces.shar из ~ftp/contrib с expo.lcs.mit.edu
  18. # и сохранит под именем xplaces.sh в текущем каталоге, затем заберет все исправления (fixes)
  19. # из ~ftp/pub/R3/fixes и поместит их в каталог ~/fixes.
  20. # Очевидно, что последовательность ключей и аргументов очень важна, поскольку
  21. # она определяет последовательность операций, выполняемых с удаленным ftp-сервером
  22. #
  23. # Mark Moraes (<a href=»mailto:moraes@csri.toronto.edu»>moraes@csri.toronto.edu</a>), Feb 1, 1989
  24. #
  25. # ==> Эти комментарии добавлены автором документа.
  26. # PATH=/local/bin:/usr/ucb:/usr/bin:/bin
  27. # export PATH
  28. # ==> Первые две строки в оригинальном сценарии вероятно излишни.
  29. TMPFILE=/tmp/ftp.$$
  30. # ==> Создан временный файл
  31. SITE=`domainname`.toronto.edu
  32. # ==> ‘domainname’ подобен ‘hostname’
  33. usage=«Порядок использования: $0 [-h удаленный_сервер] [-d удаленный_каталог]… [-f удаленный_файл:локальный_файл]… \
  34.                [-c локальный_каталог] [-m шаблон_имен_файлов] [-v]»
  35. ftpflags=«-i -n»
  36. verbflag=
  37. set -f          # разрешить подстановку имен файлов (globbing) для опции -m
  38. set x `getopt vh:d:c:m:f: $*`
  39. if [ $? != 0 ]; then
  40.         echo $usage
  41.         exit 65
  42. fi
  43. shift
  44. trap ‘rm -f ${TMPFILE} ; exit’ 0 1 2 3 15
  45. echo «user anonymous ${USER-gnu}@${SITE} > ${TMPFILE}«
  46. # ==> Добавлены кавычки (рекомендуется).
  47. echo binary >> ${TMPFILE}
  48. for i in $*   # ==> Разбор командной строки.
  49. do
  50.         case $i in
  51.         -v) verbflag=-v; echo hash >> ${TMPFILE}; shift;;
  52.         -h) remhost=$2; shift 2;;
  53.         -d) echo cd $2 >> ${TMPFILE};
  54.             if [ x${verbflag} != x ]; then
  55.                 echo pwd >> ${TMPFILE};
  56.             fi;
  57.             shift 2;;
  58.         -c) echo lcd $2 >> ${TMPFILE}; shift 2;;
  59.         -m) echo mget «$2» >> ${TMPFILE}; shift 2;;
  60.         -f) f1=`expr «$2» : «\([^:]*\).*»`; f2=`expr «$2» : «[^:]*:\(.*\)»`;
  61.             echo get ${f1} ${f2} >> ${TMPFILE}; shift 2;;
  62.         —) shift; break;;
  63.         esac
  64. done
  65. if [ $# -ne 0 ]; then
  66.         echo $usage
  67.         exit 65   # ==> В оригинале было «exit 2», изменено в соответствии со стандартами.
  68. fi
  69. if [ x${verbflag} != x ]; then
  70.         ftpflags=«${ftpflags} -v»
  71. fi
  72. if [ x${remhost} = x ]; then
  73.         remhost=prep.ai.mit.edu
  74.         # ==> Здесь можете указать свой ftp-сервер по-умолчанию.
  75. fi
  76. echo quit >> ${TMPFILE}
  77. # ==> Все команды сохранены во временном файле.
  78. ftp ${ftpflags} ${remhost} < ${TMPFILE}
  79. # ==> Теперь обработать пакетный файл.
  80. rm -f ${TMPFILE}
  81. # ==> В заключение, удалить временный файл (можно скопировать его в системный журнал).
  82. # ==> Упражнения:
  83. # ==> ———-
  84. # ==> 1) Добавьте обработку ошибок.
  85. # ==> 2) Добавьте уведомление звуковым сигналом.

Запись опубликована в рубрике Без рубрики. Добавьте в закладки постоянную ссылку.