Если вам нужно загрузить весь каталог вместо одного файла через WebDAV, вы можете использовать следующий подход.
Представьте, что у вас есть следующая локальная папка, которую вы собираетесь загрузить через WebDAV.
local_folder_to_upload
│ test.txt
│ test1.txt
│
└───nested_folder1
│ │ file1.txt
│ │ file2.txt
│ │
│ └───nested_folder2
│ │ file11.txt
│ │ file12.txt
1. Сначала вам нужно создать вложенные каталоги из локальной папки (если они есть) на сервере. Поскольку WebDAV не поддерживает рекурсивную загрузку, вы должны сделать это в отдельном шаге (, если вы должны использовать ftp
- вы бы добавили флаг --ftp-create-dirs
для этого). Для создания этих папок через WebDAV вам нужно использовать MKCOL метод .
curl -X MKCOL 'http://your.server/uploads/nested_folder1' --user 'name:pwd'
curl -X MKCOL 'http://your.server/uploads/nested_folder1/nested_folder2' --user 'name:pwd'
Обратите внимание, что вы не можете создать их за один запрос согласно спецификации .
если сделан запрос на создание коллекции / a / b / c / d /, и
/ a / b / c / не существует, запрос должен завершиться неудачей.
2. Во-вторых, вы можете использовать вывод команды оболочки find , чтобы загрузить ее на свой сервер, используя curl
.
cd local_folder_to_upload && find . -exec curl -T {} 'http://your.server/uploads/{}' --user 'name:pwd' \;
Код выше зациклите все ваши файлы в данном каталоге (используя find) и добавьте вывод (имя файла с относительным путем) к заполнителю {}
в URL вашего веб-сервера. Таким образом, он делает несколько запросов (по одному на каждый файл), и поскольку все вложенные папки были созданы заранее - эти запросы не должны завершаться сбоем.
Надеюсь, это кому-нибудь пригодится.