Jak rekurencyjnie kopiować / pobierać cały katalog webdav?

9

Kiedy próbuję skopiować folder z serwera webdav na dysk lokalny za pomocą Nautilus, kopiuje to, co wydaje się być plikiem manifestu (xml z listą katalogów itp.). Z trupem dostaję pusty plik.

Chciałbym móc rekurencyjnie kopiować całe drzewo katalogów. Czy ktoś wie, jak to zrobić?

ps: Używam Ubuntu 11.04 z Nautilus 2.32.2.1 i Cadaver 0.23.3

drevicko
źródło
Czy potrzebujesz narzędzia z graficznym interfejsem użytkownika, czy wget jest dla ciebie „wystarczająco dobry”?
Ocaso Protal
Rzuciłem okiem na wget i nie twierdziłem, że robię webdav ... Gdyby tak było, zadziałałoby dla mnie
drevicko
2
Spróbuj tego: wget --user = {nazwa użytkownika} --password = {hasło} --wait = 20 --limit-rate = 20K -r -p -U Mozilla http: // {witryna} Jeśli to działa, dodaj go jako odpowiedź;)
Rinzwind
1
Ale webdav jest zwykłym https, więc wget powinien działać. szybkie wyszukiwanie w Google dało mi astron.nl/northstar/nswiki/lib/exe/… szybki przegląd wget z
webdav
1
ciekawe .. kiedy wskazuję go na katalog / kolekcję webdav, pobiera plik html dla tego katalogu (tj. z listą rzeczy jako strony internetowej), a następnie narzeka: "localhost / webdav / caliber-library: Not a directorylocalhost /webdav/calibre-library/index.html: Brak katalogu ”. Kiedy wskazuję go na katalog główny webdav, jego raczej losowy ... zaczyna pobierać wspaniały serwer WWW. Pamiętaj, że jest to tylko protokół https i samopodpisany, więc musiałem dodać „- no-check-certificate”
drevicko

Odpowiedzi:

3

Ta odpowiedź zawiera podsumowanie sugestii podanych w komentarzach @Ocaso i @Rinzwind.

Użyłem tego:

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

Nie idealnie (pobrano wiele „index.html? C = M; O = D” i tym podobne), ale poza tym działało dobrze.

„-R” pobiera rekurencyjnie, podążając za linkami.

„-Np” zapobiega wstępowi do katalogów nadrzędnych (w przeciwnym razie pobierzesz całą stronę internetową!).

„-NH” uniemożliwia utworzenie katalogu o nazwie „mój-host” (czego nie chciałem).

„--Cut-dirs = 1” uniemożliwia utworzenie katalogu o nazwie „my-webdav-dir”.

„--No-check-certificate” wynika z tego, że używam samopodpisanego certyfikatu na serwerze webdav (wymuszam także https).

„-U Mozilla” ustawia agenta użytkownika w żądaniu http na „Mozilla” - mój serwer webdav tak naprawdę tego nie potrzebował, ale i tak go załączyłem.

drevicko
źródło
Używanie tego, aby pobrać plik z nextcloud to nie pobrać plik z treścią: This is the WebDAV interface. It can only be accessed by WebDAV clients such as the Nextcloud desktop sync client.. Wiesz, dlaczego tak się dzieje?
Micromegas
Domyślam się, że nextcloud oczekuje klienta, który wygląda jak klient WebDAV (w przeciwieństwie do Mozilli, która jest przeglądarką). Jeśli masz klienta i sniffer pakietów (np. Wireshark), możesz dowiedzieć się, jakiego klienta użytkownika używa w swoich żądaniach.
drevicko
Alternatywnie dowiedz się, że jego agentem użytkownika może być „Mozilla / 5.0 (Android) Nextcloud-android / 3.8.0” z sieci .
drevicko
Dziękuję bardzo drevicko !! Zrobię to
Micromegas
Również tutaj . Powodzenia!
drevicko
3

W rzeczywistości z Cadaver możesz cdprzejść do katalogu, z którego chcesz pobrać pliki i mget *.

Viktor Denischik
źródło
2
Aby była to przydatna odpowiedź, musisz powiedzieć użytkownikowi, jak to zrobić.
RolandiXor
1
Hm, mget * .w folderze lub w mget foldernamewyniku 501 Not Implemented. Czy to naprawdę działało dla ciebie na box.com?
alexanderadam
@Wurstsalat Nie możesz dodawać dodatkowych „.” ; bierze też nazwy plików jako argumenty, więc będziesz musiał zrobić mget nazwa_folderu / nazwa pliku.
JasoonS,
To nie działa dla mnie, gdy są podkatalogi ( część rekurencyjna ).
Radon Rosborough,
3

Możesz użyć dav2fs do zamontowania serwera webdav, a następnie możesz uzyskać do niego dostęp jak w katalogu lokalnym.

Liam
źródło
skorzystaj również z tej metody, łatwy dostęp do plików i folderów
bobbyrne01
Ta metoda jest najwolniejsza w porównaniu z innymi i nie zawsze działa (błędy związane z squirksami nazw plików).
alexanderadam
3

Alternatywnie możesz zamontować go jako ścieżkę dostępną jako część własnego systemu plików.

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

Uwaga: /your/local/mount/pointmusi to być istniejący katalog, aby to działało.

O ile wiem, wystarczy uruchomić następujące polecenie, aby polecenie zadziałało: sudo apt-get install davfs2(Jeśli wymagana jest większa konfiguracja, przepraszam, dawno temu to zrobiłem).

(Dodałem to jako odpowiedź, ponieważ uważam, że odpowiedź Liama ​​nie podała wystarczających informacji).

JasoonS
źródło
stosując sudopobrać plik naprawdę nie brzmi dobrze.
Equidamoid
1
@Equidamoid Montowanie systemów plików wymaga dostępu do konta root, ponieważ może w niektórych przypadkach ominąć lokalne uprawnienia UNIX.
Radon Rosborough,