Автоматизация загрузки файлов на WebDav

Ранее на страницах этого сайта рассматривалась возможность монтирования облачных WebDav-хранилищ при помощи fuse-системы davfs2. Одним из ее недостатков был тот факт, что при любых операциях над файлами они неминуемо копировались сначала во временную директорию, а лишь затем перемещались в целевой каталог.

Альтернативой davfs2 для прямого получения или загрузки файлов в облачное хранилище является утилита cadaver. Однако, она предполагает интерактивное взаимодействие с пользователем, и использование ее в автоматизированных скриптах не представляется возможным. Обойти эту проблему можно при помощи утилиты empty, аналога expect для создания и взаимодействия с псевдотерминалами.

Для реализации полностью автоматической загрузки и скачивания файлов с облачного хранилища был создан скрипт webdav.sh.

Перед использованием необходимо настроить несколько параметров, определенных в начале скрипта:

  • ififo=/tmp/empty.in.fifo
    – путь к fifo ввода, на роутерах желательно размещать в /tmp
  • ofifo=/tmp/empty.out.fifo
    – путь к fifo вывода, на роутерах желательно размещать в /tmp
  • cmd=”cadaver https://webdav.yandex.ru”
    – путь к утилите cadaver и адрес WebDav-сервиса
  • username=YourUserName
    – логин от WebDav-сервиса
  • password=YourPassword
    – пароль от WebDav-сервиса

Доступные команды:

  • webdav.sh put <локальный файл> [удаленный путь] – загрузка файла в облако
    Локальный файл – обязательный параметр, должен быть указан один, файл должен быть доступен для чтения;
    Удаленный путь – опционально, если его не указать, то файл будет загружен в корневой каталог WebDav.
  • webdav.sh get <удаленный файл> [локальный путь] – выгрузка файла из облака
    Удаленный файл – обязательный параметр, должен быть указан один, файл должен существовать;
    Локальный путь – опционально, если его не указать, то файл будет загружены в текущий каталог.
  • webdav.sh mput <локальные файлы> [удаленный путь] – множественная загрузка
    Локальные файлы – маска вида “/path/to/*.files”, указание кавычек обязательно;
    Удаленный путь – опционально, если его не указать, то файлы будут загружены в корневой каталог WebDav.
  • webdav.sh mget <удаленные файлы> [локальный путь] – множественная выгрузка
    Удаленные файлы – маска вида “/remote/path/*”;
    Локальный путь – опционально, если его не указать, то файлы будут загружены в текущий каталог.

Например, для загрузки файла “/etc/config/firewall” в удаленный каталог “/openwrt” необходимо набрать команду webdav.sh put /etc/config/firewall /openwrt/firewall. Отметим, что удаленный каталог “openwrt” перед выполнением этой команды должен существовать.

PS: Стоит обратить внимание, что утилита empty имеет такую особенность, что если указанные в конфигурации fifo-файлы уже существуют на момент ее запуска, то она просто не запустится, тихо ругнувшись в syslog. А в случае каких-либо сбоев в ходе работы с empty эти fifo-файлы могут автоматически не удалиться.

This entry was posted in Сеть и интернет and tagged , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>