Автоматизация загрузки файлов обновления с ftp

Задача

Появилась задача - Нужно сделать автоматическую загрузку файлов, которые загружаются на ftp (находится в Москве) на сервер филиала. Все это делается для того, чтобы облегчить жизнь сотрудников и не выполнять эту монотонную работу вручную.


Решение:

Использование WGET
- скачать здесь
- почитать про ключи можно в инструкции, которая идет вместе с утилитой - файл wget.html


Собственно строка, по которой производится скачивание представлено ниже:
CMD:
@echo Скачиваем AzkExchange

wget -P "Y:\AZKExchange\AzkExchange\2.46.0" --user=**** --password=***** --output-file=logs\Exch.log -N -A exe -c  ftp://ftp.***com.com:21/!azk_update/!finance/!azk_exchange/!2.46/AzkExchange*.exe


Ниже описание использованных ключей:

-P prefix
--directory-prefix=prefix
Устанавливает корневой каталог в prefix. Корневой каталог - это каталог, куда будут сохранены все файлы и подкаталоги, т.е. вершина скачиваемого дерева. По умолчанию . (текущий каталог).

--user / --password
Указываем имя пользователя и пароль на FTP/HTTP

-o logfile
--output-file
Протоколировать все сообщения в logfile. Обычно сообщения выводятся в standard error. Важно, что при новом запуске созданный ранее лог будет перезаписываться.

-a logfile
--append-output=logfile
Дописывать в logfile. То же, что -o, только logfile не перезаписывается, а дописывается. Если logfile не существует, будет создан новый файл.

-N 
--timestamping
Включает использование временных отметок.

-A exe  / −R rejlist
−−accept acclist   /  −−reject rejlist 
Дает возможность указать маску файлов, которые нужно скачать (-А) или не нужно скачивать (-R). Обратите внимание, что если любой из подстановочных знаков,*,?, [или], появляются в элементе acclist или rejlist, он будет рассматриваться как шаблон, а не суффикс. В этом случае необходимо заключить шаблон в кавычки, чтобы оболочка не расширяла его, как в −A "*.mp3 " или - a ’*.mp3’.
-c
--continue
Продолжение закачки частично скачанного файла. Это полезно при необходимости завершить закачку, начатую другим процессом Wget или другой программой.

-r
Параметр указывает на рекурсивный поиск (как оказалось при скачивании папок этот параметр необходим)

--show-progress
Позволяет вывести в консоль wget индикатор выполнения процесса с детализацией.
По умолчанию wget отображает индикатор выполнения только в подробном режиме. Однако можно хотеть, чтобы wget отображал индикатор выполнения на экране в сочетании с любыми другими режимами многословия, такими как --no-verbose или --quiet . Это часто является желательным свойством при вызове wget для загрузки нескольких маленьких / больших файлов. В таком случае, wget может быть просто вызван с этим параметром, чтобы получить более чистый вывод на экран.

-nH 
--no-host-directories
Отключает создание хост-каталога. По умолчания запуск Wget -r http://htmlweb.ru/ создаст структуру каталогов, начиная с htmlweb.ru/. Данный ключ отменяет такое поведение.

--cut-dirs=number
Игнорировать number уровней вложенности каталогов. Это полезный ключ для чёткого управления каталогом для сохранения рекурсивно скачанного содержимого. 
Например, требуется скачать каталог ftp://htmlweb.ru/pub/xxx/. При скачивании с -r локальная копия будет сохранена в ftp.htmlweb.ru/pub/xxx/. 
Если ключ -nH может убрать ftp.htmlweb.ru/ часть, остаётся ненужная pub/xemacs. Здесь на помощь приходит --cut-dirs; он заставляет Wget закрывать глаза на number удалённых подкаталогов. Ниже приведены несколько рабочих примеров --cut-dirs.
No options        -> ftp.htmlweb.ru/pub/xxx/
-nH               -> pub/xxx/
-nH --cut-dirs=1  -> xxx/
-nH --cut-dirs=2  -> .
--cut-dirs=1      -> ftp.htmlweb.ru/xxx/

Если вам нужно лишь избавиться от структуры каталогов, то этот ключ может быть заменён комбинацией -nd и -P. Однако, в отличии от -nd, --cut-dirs не теряет подкаталоги - например, с -nH --cut-dirs=1, подкаталог beta/ будет сохранён как xxx/beta, как и ожидается.

На данный момент есть возможность скачивать файлы только в нужных форматах, так как это настраивается легко по тегу -A. Но при этом есть сложности со скачиванием ОДНОЙ определенной директории (папки). 
Проблема заключается в следующем:
Папка с обновлениями содержит папки с названиями
Необходимо скачивать только те, что в своем названии НЕ имеют слова patch  
Для решения данной проблемы необходимо использовать следующие ключи:


−I list 
−−include−directories=list
Укажите разделенный запятыми список каталогов, которым вы хотите следовать при загрузке. Элементы списка могут содержать символы подстановки.

−X list 
−−exclude−directories=list

Укажите разделенный запятыми список каталогов, которые вы хотите исключить из загрузки. Элементы списка могут содержать символы подстановки.


CMD:
wget -P "Y:\АЦК-Финансы\Эталонные сборки\2.46.0" --user=**** --password=**** --output-file=logs\finan.log --show-progress -N -nH --cut-dirs=4 -X /!azk_update/!finance/!builds/!2.46.0/patch*/,/!azk_update/!finance/!builds/!2.46.0/v*/ -r ftp://ftp.*****.com:21/!azk_update/!finance/!builds/!2.46.0/

Здесь мы указываем, что папки (каталоги) с названиями patch* и v* скачивать не нужно

Ссылки на ресурсы:

Комментарии

Популярные сообщения из этого блога

Linux (РедОС). Сброс пароля

TRUNCATE / DELETE / DROP или как очистить таблицу

КБК. КВФО - Код вида финансового обеспечения (деятельности)

РедОС. Подключение к сетевой папке

SQL Error [53200]: ОШИБКА: нехватка разделяемой памяти Подсказка: Возможно, следует увеличить параметр max_locks_per_transaction