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


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.


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 *.


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.


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.)


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.