Como copiar / baixar recursivamente um diretório webdav inteiro?

9

Quando tento copiar uma pasta de um servidor webdav para um disco local usando o Nautilus, ele copia o que parece ser um arquivo de manifesto (xml com a lista de diretórios etc.). No cadáver, recebo um arquivo vazio.

Eu gostaria de poder copiar recursivamente uma árvore de diretórios inteira. Alguém sabe como eu posso fazer isso?

ps: Estou usando o Ubuntu 11.04 com Nautilus 2.32.2.1 e Cadaver 0.23.3

drevicko
fonte
Você precisa de uma ferramenta com uma GUI ou o wget é "bom o suficiente" para você?
Ocaso Protal
Eu tinha uma espiada no wget, e não pretendem fazer webdav ... Ele iria trabalhar para mim se isso acontecesse
drevicko
2
Tente isto: wget --user = {nome de usuário} --password = {senha} --wait = 20 --limit-rate = 20K -r -p -U Mozilla http: // {website} Se funcionar, adicione-o como resposta;)
Rinzwind 14/02
1
Mas o webdav é apenas https simples, portanto o wget deve funcionar. uma rápida pesquisa google me deu astron.nl/northstar/nswiki/lib/exe/... para obter uma rápida visão geral sobre wget com o WebDAV
Ocaso Protal
1
interessante .. quando eu aponto para um diretório / coleção webdav, ele pega o arquivo html para esse diretório (ou seja: com a lista de itens lá como uma página da web) e reclama: "localhost / webdav / calibre-library: não um directorylocalhost /webdav/calibre-library/index.html: não é um diretório ". Quando eu apontar para a raiz do webdav, é bastante aleatório ... acaba começando a baixar o servidor da web whold. Observe que é apenas https e autoassinado, então tive que adicionar '--no-check-certificate'
drevicko

Respostas:

3

Esta resposta resume as sugestões dadas nos comentários de @Ocaso e @Rinzwind.

Eu usei isso:

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

Não é perfeito (baixou muitos 'index.html? C = M; O = D' e similares), mas funcionou ok.

O "-r" é baixado recursivamente, seguindo os links.

O "-np" impede a ascensão aos diretórios pai (caso contrário, você baixa o site inteiro!).

O "-nH" impede a criação de um diretório chamado "my-host" (que eu não queria).

O "--cut-dirs = 1" impede a criação de um diretório chamado "my-webdav-dir".

O "--no-check-certificate" é porque estou usando um certificado autoassinado no servidor webdav (também estou forçando https).

O "-U Mozilla" define o agente do usuário na solicitação http como "Mozilla" - meu servidor webdav não precisava disso, mas eu o incluí mesmo assim.

drevicko
fonte
Usando isso para baixar um arquivo de nextcloud que faz o download de um arquivo com o conteúdo: This is the WebDAV interface. It can only be accessed by WebDAV clients such as the Nextcloud desktop sync client.. Alguma idéia de por que isso acontece?
Micromegas 14/04
Meu palpite é que o nextcloud espera um agente de usuário que se pareça com um cliente WebDAV (em oposição ao Mozilla, que é um navegador). Se você possui um cliente e um farejador de pacotes (por exemplo: wireshark), pode descobrir qual agente de usuário ele usa nas solicitações.
drevicko 16/04
Como alternativa, descubra que o agente do usuário pode ser "Mozilla / 5.0 (Android) Nextcloud-android / 3.8.0" da Web .
drevicko 16/04
Muito obrigado drevicko !! Eu vou fazer isso
Micromegas 16/04
Também aqui . Boa sorte!
drevicko 16/04
3

Na verdade, com o Cadaver, você pode acessar o cddiretório a partir do qual deseja baixar arquivos e mget *.

Viktor Denischik
fonte
2
Para que essa seja uma resposta útil, você precisa informar ao usuário como fazer isso.
RolandiXor
1
Hum, mget * .em uma pasta ou mget foldernameresulta em 501 Not Implemented. Realmente funcionou para você no box.com?
Alexanderadam
@Wurstsalat Você não deve colocar o extra '.' ; também leva nomes de arquivos como argumentos, então você precisará fazer `mget foldername / filename '.
21717 JasoonS
Isso não funciona para mim quando há subdiretórios (a parte recursiva ).
Radon Rosborough
3

Você pode usar dav2fs para montar o servidor webdav e, em seguida, pode acessá-lo como faria em um diretório local.

Liam
fonte
também usam este método, fácil acesso a arquivos e pastas
bobbyrne01
E esse método é o mais lento em comparação com os outros e nem sempre funciona (bugs relacionados a filename-squirks).
Alexanderadam
3

Como alternativa, você pode montá-lo como um caminho a ser acessado como parte de seu próprio sistema de arquivos.

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

Nota: /your/local/mount/pointdeve ser um diretório existente real para que isso funcione.

Tanto quanto sei, você só precisa executar o seguinte para que o comando funcione: sudo apt-get install davfs2(Se for necessária mais configuração, peço desculpas, foi há muito tempo que fiz isso.)

(Adicionei isso como resposta porque acho que a resposta de Liam não forneceu informações suficientes.)

JasoonS
fonte
usar sudopara baixar um arquivo não parece realmente certo.
Equidamóide
1
A montagem de sistemas de arquivos Equidamoid requer acesso root, pois pode permitir que você ignore as permissões UNIX locais em alguns casos.
Radon Rosborough