web-dev-qa-db-fra.com

rsync à partir d'une source webdav non montée

J'ai une caméra de vidéosurveillance sans marque en marque blanche qui expose tous ses enregistrements via un serveur WebDAV. Depuis environ un mois, je monte le lecteur avec davfs2, mais ce n’est pas une solution particulièrement élégante:

  • La liste de fichiers doit être régénérée pour chaque commande (cp ou tar), ce qui prend un certain temps.
  • cp semble ralentir légèrement après chaque transfert de fichier successif
  • rsync --progress semble ne mesurer que la vitesse de transfert local du fichier temporaire à la destination finale

J'ai vu quelques personnes utiliser rsync pour sauvegarder sur différents types de serveurs cloud basés sur WebDAV, mais lorsque j'essaie:

rsync -a admin@http://192.168.0.22/webdav/ /media/martin/internal-large/CCTV-TWO/

tout ce que je récupère, c'est l'erreur:

ssh: Could not resolve hostname http: Name or service not known

Y a-t-il un moyen de faire le transfert de cette façon?

Edit from comment: Je suppose que ma question était trop mal formulée pour être comprise. Premièrement, le webdav est la source. Deuxièmement, si vous utilisez uniquement une adresse IP, rsync suppose que vous souhaitiez un transfert basé sur SSH.

Si j'émets la commande: rsync --progress -a [email protected]:/webdav /media/martin/internal-large/CCTV-TWO/

Je reçois les erreurs suivantes:

ssh: connect to Host 192.168.0.24 port 22: Connection refused 
rsync: connection unexpectedly closed (0 bytes received so far)
[Receiver] rsync error: unexplained error (code 255) at io.c(226)
1
Martin KS

En guise d'alternative à rsync, vous pouvez utiliser cette fonction en utilisant wget avec le commutateur -m (--mirror), qui applique -r (récursivité), -N (horodatage correspondant au fichier distant). une profondeur de niveau infinie que vous ne souhaitez peut-être pas réduire en utilisant le commutateur -l, et applique également le commutateur --no-remove-listing (une option de transfert FTP qui, à mon avis, ne compte pas pour un transfert via HTTP)

Nous devrons également cibler explicitement le répertoire de stockage pour éviter de tout jeter dans le répertoire dans lequel wget a été lancé (comportement par défaut, si je me souviens bien)

Nous pouvons faire cela avec le commutateur -P comme dans -P target ou --directory-prefix = target

Vous voudrez probablement aussi éviter de grimper au-dessus du répertoire source que vous ciblez avec le commutateur -np (--no-parent) qui s'applique:

Do not ever ascend to the parent directory when retrieving recursively.
This is a useful option, since it guarantees that only the files below 
a certain hierarchy will be downloaded.

Vous pouvez spécifier les informations d'identification comme suit:

--user=user
--password=password

 Specifies the username user and password password for both FTP and HTTP file retrieval.  These parameters can be overridden using the --ftp-user and
           --ftp-password options for FTP connections and the --http-user and --http-password options for HTTP connections.

En mettant tout cela ensemble, je me retrouve avec une commande qui ressemble à ceci.

wget -m 192.168.0.22/webdav/ -np -P ./media/martin/internal-large/CCTV-TWO/

Dans votre cas, vous pouvez ou non ajouter les options --user = admin et --password = whatitis.

Il peut y avoir d'autres commutateurs utiles pour votre cas d'utilisation particulier. Il y a une page de manuel détaillée disponible avec la commande man wget Une des choses que vous voudrez peut-être revoir est --no-clobber j'ai inclus un extrait de la page de manuel ci-dessous:

--no-clobber
           If a file is downloaded more than once in the same directory,
           Wget's behavior depends on a few options, including -nc.  In
           certain cases, the local file will be clobbered, or overwritten,
           upon repeated download.  In other cases it will be preserved.

           When running Wget without -N, -nc, -r, or -p, downloading the same
           file in the same directory will result in the original copy of file
           being preserved and the second copy being named file.1.  If that
           file is downloaded yet again, the third copy will be named file.2,
--
           Therefore, ""no-clobber"" is actually a misnomer in this
           mode---it's not clobbering that's prevented (as the numeric
           suffixes were already preventing clobbering), but rather the
           multiple version saving that's prevented.

           When running Wget with -r or -p, but without -N, -nd, or -nc, re-
           downloading a file will result in the new copy simply overwriting
           the old.  Adding -nc will prevent this behavior, instead causing
           the original version to be preserved and any newer copies on the
           server to be ignored.

Sources:

man wget

https://stackoverflow.com/questions/1078524/how-to-specify-the-location-with-wget

https://stackoverflow.com/questions/17282915/download-an-entire-directory-using-wget

1
Elder Geek