¿Cómo copio / descargo recursivamente un directorio webdav completo?

9

Cuando intento copiar una carpeta desde un servidor webdav a un disco local usando Nautilus, copia lo que parece ser un archivo de manifiesto (xml con la lista del directorio, etc.). Con cadaver me sale un archivo vacío.

Me gustaría poder copiar recursivamente un árbol de directorios completo. ¿Alguien sabe cómo puedo hacer esto?

ps: estoy usando Ubuntu 11.04 con Nautilus 2.32.2.1 y Cadaver 0.23.3

drevicko
fuente
¿Necesita una herramienta con una GUI o es wget "lo suficientemente bueno" para usted?
Ocaso Protal
Eché un vistazo a wget, y no pretendía hacer webdav ... Funcionaría para mí si lo fuera
drevicko
2
Pruebe esto: wget --user = {username} --password = {password} --wait = 20 --limit-rate = 20K -r -p -U Mozilla http: // {website} Si funciona, lo agregaré como respuesta;)
Rinzwind
1
Pero webdav es simplemente https, por lo que wget debería funcionar. una búsqueda rápida en google me dio astron.nl/northstar/nswiki/lib/exe/… para obtener una visión general rápida sobre wget con webdav
Ocaso Protal
1
interesante ... cuando lo apunto a un directorio / colección webdav, toma el archivo html para ese directorio (es decir, con la lista de cosas allí como una página web) y luego se queja: "localhost / webdav / calibre-biblioteca: No es un directorio localhost /webdav/calibre-library/index.html: no es un directorio ". Cuando lo apunto a la raíz de webdav, es bastante aleatorio ... termina comenzando a descargar el servidor web completo. Tenga en cuenta que es solo https y autofirmado, así que tuve que agregar '--no-check-certificate'
drevicko

Respuestas:

3

Esta respuesta resume las sugerencias dadas en los comentarios de @Ocaso y @Rinzwind.

Usé esto:

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

No es perfecto (descargué muchos 'index.html? C = M; O = D' y similares) pero por lo demás funcionó bien.

El "-r" se descarga de forma recursiva, siguiendo los enlaces.

El "-np" evita el ascenso a directorios principales (¡de lo contrario, descarga todo el sitio web!).

El "-nH" impide crear un directorio llamado "my-host" (que no quería).

El "--cut-dirs = 1" impide crear un directorio llamado "my-webdav-dir".

El "--no-check-certificate" se debe a que estoy usando un certificado autofirmado en el servidor webdav (también estoy obligando a https).

El "-U Mozilla" establece el agente de usuario en la solicitud http en "Mozilla" - mi servidor webdav en realidad no necesitaba esto, pero lo he incluido de todos modos.

drevicko
fuente
El uso de esta opción para descargar un archivo desde nextcloud sí descargar un archivo con el contenido: This is the WebDAV interface. It can only be accessed by WebDAV clients such as the Nextcloud desktop sync client.. ¿Alguna idea de por qué sucede eso?
Micromegas
Supongo que nextcloud espera un agente de usuario que se parezca a un cliente WebDAV (a diferencia de Mozilla, que es un navegador). Si tiene su cliente y un sniffer de paquetes (por ejemplo: wireshark), puede averiguar qué agente de usuario utiliza en sus solicitudes.
drevicko
Alternativamente, descubra que su agente de usuario podría ser "Mozilla / 5.0 (Android) Nextcloud-android / 3.8.0" de la web .
drevicko
Muchas gracias drevicko !! Haré esto
Micromegas
También aquí . ¡Buena suerte!
drevicko
3

En realidad, con Cadaver puedes acceder cdal directorio desde el que deseas descargar los archivos mget *.

viktor denischik
fuente
2
Para que esta sea una respuesta útil, debe decirle al usuario cómo hacerlo.
RolandiXor
1
Hm, mget * .en una carpeta o mget foldernameresultados en 501 Not Implemented. ¿Realmente funcionó para ti en box.com?
alexanderadam
@Wurstsalat No debes poner el '.' Extra ; también toma nombres de archivos como argumentos, por lo que deberá hacer 'mget foldername / filename'.
JasoonS
Eso no funciona para mí cuando hay subdirectorios (la parte recursiva ).
Radon Rosborough
3

Puede usar dav2fs para montar el servidor webdav, y luego puede acceder a él como lo haría con un directorio local.

Liam
fuente
también use este método, fácil acceso a archivos y carpetas
bobbyrne01
Y este método es el más lento en comparación con otros y no siempre funciona (errores relacionados con el nombre de archivo-squirks).
alexanderadam
3

Alternativamente, puede montarlo como una ruta para acceder como parte de su propio sistema de archivos.

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

Nota: /your/local/mount/pointtiene que ser un directorio real existente para que esto funcione.

Hasta donde sé, solo necesita ejecutar lo siguiente para que el comando funcione: sudo apt-get install davfs2(Si se requiere más configuración, me disculpo, fue hace mucho tiempo que hice esto).

(Agregué esto como respuesta porque siento que la respuesta de Liam no dio suficiente información).

JasoonS
fuente
usar sudopara descargar un archivo realmente no suena bien.
Equidamoid
1
Los sistemas de archivos de @Equidamoid Mounting requieren acceso a la raíz, ya que en algunos casos pueden omitir los permisos locales de UNIX.
Radon Rosborough