Как мне рекурсивно скопировать / скачать весь каталог webdav?


9

Когда я пытаюсь скопировать папку с сервера webdav на локальный диск с помощью Nautilus, он копирует то, что выглядит как файл манифеста (xml со списком каталогов и т. Д.). С трупом я получаю пустой файл.

Я хотел бы иметь возможность рекурсивно копировать все дерево каталогов. Кто-нибудь знает, как я могу это сделать?

PS: я использую Ubuntu 11.04 с Nautilus 2.32.2.1 и Cadaver 0.23.3


Вам нужен инструмент с графическим интерфейсом или wget "достаточно хорош" для вас?
Ocaso Protal

Я посмотрел на wget, и он не претендовал на webdav ... Это сработало бы для меня, если бы это произошло
drevicko

2
Попробуйте это: wget --user = {имя пользователя} --password = {пароль} --wait = 20 --limit-rate = 20K -r -p -U Mozilla http: // {website} Если это работает, я добавлю его как ответ;)
Rinzwind

1
Но webdav - это просто https, поэтому wget должен работать. быстрый поиск в Google дал мне astron.nl/northstar/nswiki/lib/exe/…, чтобы получить быстрый обзор wget с помощью webdav
Ocaso Protal

1
интересно .. когда я указываю на каталог / коллекцию webdav, он берет html-файл для этого каталога (т.е. со списком вещей в виде веб-страницы), а затем жалуется: "localhost / webdav / caliber-library: не каталогlocalhost /webdav/calibre-library/index.html: не каталог ". Когда я указываю на корень webdav, он довольно случайный ... заканчивает тем, что начинает загружать веб-сервер whold. Обратите внимание, что он только https и самоподписан, поэтому мне пришлось добавить '--no-check-certificate'
drevicko

Ответы:


3

Этот ответ суммирует предложения, данные в комментариях @Ocaso и @Rinzwind.

Я использовал это:

wget -r -nH -np --cut-dirs=1 --no-check-certificate -U Mozilla --user={uname} 
    --password={pwd} https://my-host/my-webdav-dir/my-dir-in-webdav

Не идеально (скачал много «index.html? C = M; O = D» и т.п.), но в остальном работал нормально.

"-R" скачивает рекурсивно, следуя ссылкам.

«-Np» предотвращает восхождение к родительским каталогам (иначе вы скачиваете весь сайт!).

«-NH» предотвращает создание каталога с именем «my-host» (который я не хотел).

«--Cut-dirs = 1» запрещает создание каталога с именем «my-webdav-dir».

«--No-check-certificate» - потому что я использую самоподписанный сертификат на сервере webdav (я также использую https).

«-U Mozilla» устанавливает пользовательский агент в запросе http на «Mozilla» - моему webdav-серверу это на самом деле не требовалось, но я все равно включил его.


Используя эту функцию, чтобы загрузить файл с nextcloud это загрузить файл с содержимым: This is the WebDAV interface. It can only be accessed by WebDAV clients such as the Nextcloud desktop sync client.. Есть идеи, почему это происходит?
Micromegas

Я предполагаю, что nextcloud ожидает пользовательский агент, который выглядит как клиент WebDAV (в отличие от Mozilla, который является браузером). Если у вас есть их клиент и анализатор пакетов (например, wireshark), вы можете узнать, какой пользовательский агент он использует в своих запросах.
Древико

В качестве альтернативы узнайте, что его пользовательский агент может быть "Mozilla / 5.0 (Android) Nextcloud-android / 3.8.0" из Интернета .
drevicko

Спасибо большое drevicko !! Я сделаю это
Micromegas

Также здесь . Удачи!
Древико

3

На самом деле с Cadaver вы можете cdв каталог, из которого вы хотите скачать файлы и mget *.


2
Чтобы это было полезным ответом, вам нужно сообщить пользователю, как это сделать.
RolandiXor

1
Хм, mget * .в папке или mget foldernameрезультаты в 501 Not Implemented. Это действительно работает для вас на box.com?
alexanderadam

@ Wurstsalat Вы не должны ставить лишние '.' ; также он принимает имена файлов в качестве аргументов, так что вам нужно будет сделать `mget foldername / filename '.
JasoonS

Это не работает для меня, когда есть подкаталоги ( рекурсивная часть).
Радон Росборо

3

Вы можете использовать dav2fs для монтирования сервера webdav, а затем вы можете получить к нему доступ, как к локальному каталогу.


Также используйте этот метод, легкий доступ к файлам и папкам
bobbyrne01

И этот метод является самым медленным по сравнению с другими и не всегда будет работать (ошибки, связанные с filename-squirks).
alexanderadam

3

В качестве альтернативы вы можете смонтировать его как путь к нему, как к части вашей собственной файловой системы.

sudo mount -t davfs https://your.remote/path /your/local/mount/point

Примечание: /your/local/mount/pointчтобы это работало, должен быть реально существующий каталог.

Насколько я знаю, вам нужно всего лишь выполнить следующее, чтобы заставить команду работать: sudo apt-get install davfs2(Если требуется больше конфигурации, я прошу прощения, это было давно, я сделал это.)

(Я добавил это как ответ, потому что чувствую, что ответ Лиама не дал достаточно информации.)


использование sudoдля загрузки файла на самом деле не звучит правильно.
Эквидамоид

1
@Equidamoid Для монтирования файловых систем требуется root-доступ, поскольку в некоторых случаях он позволяет обойти локальные разрешения UNIX.
Радон Росборо
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.