Ранее на страницах этого сайта рассматривалась возможность монтирования облачных WebDav-хранилищ при помощи fuse-системы davfs2. Одним из ее недостатков был тот факт, что при любых операциях над файлами они неминуемо копировались сначала во временную директорию, а лишь затем перемещались в целевой каталог.
Альтернативой davfs2 для прямого получения или загрузки файлов в облачное хранилище является утилита cadaver. Однако, она предполагает интерактивное взаимодействие с пользователем, и использование ее в автоматизированных скриптах не представляется возможным. Обойти эту проблему можно при помощи утилиты empty, аналога expect для создания и взаимодействия с псевдотерминалами.
Для реализации полностью автоматической загрузки и скачивания файлов с облачного хранилища был создан скрипт webdav.sh.
Перед использованием необходимо настроить несколько параметров, определенных в начале скрипта:
– путь к fifo ввода, на роутерах желательно размещать в /tmp
– путь к fifo вывода, на роутерах желательно размещать в /tmp
– путь к утилите cadaver и адрес WebDav-сервиса
– логин от WebDav-сервиса
– пароль от WebDav-сервиса
Доступные команды:
– Локальный файл – обязательный параметр, должен быть указан один, файл должен быть доступен для чтения;
– Удаленный путь – опционально, если его не указать, то файл будет загружен в корневой каталог WebDav.
– Удаленный файл – обязательный параметр, должен быть указан один, файл должен существовать;
– Локальный путь – опционально, если его не указать, то файл будет загружены в текущий каталог.
– Локальные файлы – маска вида “/path/to/*.files”, указание кавычек обязательно;
– Удаленный путь – опционально, если его не указать, то файлы будут загружены в корневой каталог WebDav.
– Удаленные файлы – маска вида “/remote/path/*”;
– Локальный путь – опционально, если его не указать, то файлы будут загружены в текущий каталог.
Например, для загрузки файла “/etc/config/firewall” в удаленный каталог “/openwrt” необходимо набрать команду webdav.sh put /etc/config/firewall /openwrt/firewall. Отметим, что удаленный каталог “openwrt” перед выполнением этой команды должен существовать.
PS: Стоит обратить внимание, что утилита empty имеет такую особенность, что если указанные в конфигурации fifo-файлы уже существуют на момент ее запуска, то она просто не запустится, тихо ругнувшись в syslog. А в случае каких-либо сбоев в ходе работы с empty эти fifo-файлы могут автоматически не удалиться.
Спасибо, полезно!