Question Comment utiliser rsync sur FTP


Unix quelconque:

J'ai la ligne suivante de cmd qui fonctionne bien.

rsync -avr -e ssh /home/dir user@example.com:/home/

Mais je dois le configurer maintenant pour rsync sur un serveur distant qui ne dispose que d’un serveur FTP. Comment je fais pour ça?

J'ai regardé l'aide de rsync mais je me suis vite perdu (je ne fais pas ce genre de choses très souvent).


175
2018-06-12 09:51


origine


Cela revient à demander comment utiliser HTTP sur IRC, ou comment utiliser FTP sur SMTP ... - Juliano
Peut-être pourriez-vous expliquer votre raisonnement en ce sens, nous pourrons alors vous aider à trouver une solution viable. - James
Essentiellement, j'essayais d'automatiser une sauvegarde à partir d'un serveur d'hébergement partagé, sans comprendre le fonctionnement de rsync. je suis passé à un vps maintenant, et n'ai plus la limitation de ftp - bumperbox
La duplicité est ton dieu: scie.nti.st/2013/4/13/… - user956584
Si déploiement c’est ce que vous avez à l’esprit et cela ne vous dérange pas que NodeJS déployer, paresseux et fonctionne bien avec git - Frank Nocke


Réponses:


Vous pas. rsync ne peut pas le faire pour vous, c'est un protocole qui lui est propre et qui ne fonctionne pas par FTP.

Vous voudrez peut-être essayer csync. IIRC fournit un comportement de type rsync sur HTTP. Je ne peux pas dire si cela fonctionne via FTP, vous devrez l'essayer.


76
2018-06-12 10:00



En regardant le page web csync, il supporte sftp mais il n’ya aucune mention du support pour plain ftp. - Keith Thompson


rsync ne va pas travailler pour vous pour les raisons que d'autres ont mentionnées. cependant, lftp et ncftp les deux ont des modes "miroir" qui satisferont probablement vos besoins.

J'utilise ceci pour transmettre des éléments de mon répertoire local à un hôte Web FTP ou SFTP:

lftp -c "set ftp:list-options -a;
open ftp://user:password@your.ftp.com; 
lcd ./web;
cd /web/public_html;
mirror --reverse --delete --use-cache --verbose --allow-chown  
--allow-suid --no-umask --parallel=2 --exclude-glob .svn"

156
2018-06-12 14:58



lftp est très gentil. un autre que je viens de découvrir est wput qui a une limitation de bande passante intégrée. - karmakaze


Comme écrit par chevalet, lftp est un bon outil.

Je vous suggère de paramétrer le script et d’utiliser le

exclude-glob

options, qui exclut les noms de fichiers utilisant la fonction glob (* ,? ..) de votre shell:

#!/bin/bash    
HOST="your.ftp.host.dom"
USER="username"
PASS="password"
FTPURL="ftp://$USER:$PASS@$HOST"
LCD="/path/of/your/local/dir"
RCD="/path/of/your/remote/dir"
#DELETE="--delete"
lftp -c "set ftp:list-options -a;
open '$FTPURL';
lcd $LCD;
cd $RCD;
mirror --reverse \
       $DELETE \
       --verbose \
       --exclude-glob a-dir-to-exclude/ \
       --exclude-glob a-file-to-exclude \
       --exclude-glob a-file-group-to-exclude* \
       --exclude-glob other-files-to-exclude"

Attention: assurez-vous que le répertoire cible existe, sinon la commande cd échouera, donc l'opération y compris la suppression des arbres de fichiers  aura lieu dans le mauvais répertoire (racine)!

J'ai mis à jour le script pour que --delete Cette option est désactivée par défaut, activez-la en retirant le commentaire DELETE= command.


118
2018-01-26 11:58



M'a aidé un bon groupe. Mais je devais supprimer le "set ftp: list-options -a;" qui où gâcher des choses. - mat
Est-ce qu'il y a quelque chose comme ça qui fait la même chose avec SFTP (FTPS?)? - trusktr
Je le ferais avant cd $RCD, afin d'empêcher un-script-with-a-typo de supprimer accidentellement des fichiers d'un mauvais répertoire: set cmd:fail-exit yes. (Il semble lftp ne remarque pas qu'il est réellement sorti, jusqu'à ce que vous émettiez la commande suivante.) - Et avant cd $LCD Je ferais ceci (dans le shell local, c'est-à-dire en haut du script): set -eu. - KajMagnus
En fait, la première fois que j'exécutais mon script, je n'avais pas encore créé le répertoire distant. Le script a donc échoué sur CD-ROM dans ce répertoire non existant. Puis le script a commencé à mirror, Et ainsi --delete: d les fichiers du mauvais répertoire. (Mais je les ai copiées à nouveau, donc dans ce cas, cela importait peu. Peut-être que ça importait pour quelqu'un d'autre.) - KajMagnus
En plus de suivre les conseils de @KajMagnus sur l'utilisation de 'set -eu' et de 'cd $ LCD', ajoutez 'mkdir -p $ LCD' avant 'cd $ LCD' - ainsi, vous pourrez être sûr que le répertoire existe et vous ' re dedans. - Paul Gear


Selon ce que vous essayez réellement de faire, une autre approche complètement différente pourrait être l’utilisation curlftps monter un dossier ftp, puis peut-être rsync les deux dossiers "locaux".

L’installation est différente selon votre distribution, je ne peux donc pas généraliser, mais vous devez installerfuse et curlftpfs (prolly Debian a déjà fuse installer par défaut), puis:

  1. sudo apt-get install curlftpfs

  2. Assurez-vous que le fuse le module est chargé (modprobe fuse)

  3. sudo curlftpfs ftp.yourserver.com /path/to/ftp/folder/ -o user=username:password,allow_other

Notez qu'il n'y a pas d'espace après la dernière virgule (ce n'est pas une faute de frappe!). Si vous êtes satisfait de cela ou ne voulez pas le faire à chaque fois, vous pouvez l’ajouter à votre fstab /etc/fstab):

curlftpfs#user:password@ftp.yourserver.com /path/to/ftp/folder/ fuse auto,user,uid=1000,allow_other 0 0

Dans ce cas, vous devez vous assurer que le module de fusible est chargé avant.

Soyez avisé de deux choses:

  • Le développeur a abandonné le projet il y a un ou deux ans, donc je ne sais pas comment il est utilisable / stable pour le moment.
  • Si le mot de passe contient un caractère étrange curlftpfs pourrait échouer (peut-être que vous pouvez faire quelque chose avec le .netrc).

23
2017-12-11 12:39



FTP Fuse et rsync sont très proches de la question, mais manifestement insensés pour tout sauf un petit ensemble de petits fichiers. - Steve-o
Pourquoi serait-il fou? Par défaut, rsync stat () s ne compare pas le contenu. Cela peut être fait par ls -l avec un client ftp. - ptman
J'ai effectivement essayé cela (via rsnapshot) et cela n'a pas fonctionné, chaque fichier renvoyé avec une erreur, ce qui montre que rsync ne pouvait pas créer de lien. Donc, utiliser lftp en conjonction avec rsnapshot a fait l'affaire - Konstantin Pereiaslov
Sans faille sur 14.04 LTS; Un conseil supplémentaire: lorsque vous êtes prêt à démonter votre site FTP, utilisez simplement umount DIR où DIR était votre /path/to/ftp/folder au dessus de. - Joe
2017, et ça marche encore! Honnêtement, le moyen le plus simple de copier des fichiers depuis un site FTP enmasse. Montez localement, puis rsync comme si c'était local - td512


Il y a weex...

Weex est un utilitaire conçu pour   automatiser la tâche de distance   maintenir une page Web ou un autre FTP   archiver. Il va synchroniser un ensemble de   fichiers locaux sur un serveur distant par   effectuer des téléchargements et des suppressions à distance   comme demandé.


15
2017-08-17 14:38



Fonctionne comme un charme! Vous l'exécutez comme ceci: $ weex yourFTPconfigName Voici le manuel linuxcertif.com/man/1/weex - sobi3ch


rsync ne fonctionne pas sur ftp. Du côté distant, il lui faut soit le démon rsync, soit un shell à partir duquel il peut appeler rsync. Ftp vous permet généralement d’appeler quelques commandes et rsync n’en fait pas partie. Il existe d'autres outils destinés à automatiser des tâches ftp tels que "lftp".


9
2018-06-12 10:03





Cela semble être un bon ajustement libre: https://savannah.gnu.org/projects/ftpsync/


8
2018-06-12 15:02



Compte tenu de la pile fumante de ne touchez pas avec un poteau SourceForge est devenu récemment, peut-être devriez-vous mettre à jour le lien vers le page web du projet. - HopelessN00b


Pour ce que vous essayez de faire, vous pouvez également utiliser wget.

wget -m ftp: // nom d'utilisateur: password@domain.com


6
2018-02-25 18:12



Cela ne fera que refléter le site. Vous ne pouvez pas l'utiliser pour télécharger vos modifications. - David V.


Vous pouvez utiliser curlftpfs pour monter ftp et utiliser rsync après http://linux.die.net/man/1/curlftpfs


5
2017-12-09 21:47



Bienvenue sur ServerFault! Cela peut être un bon début, mais des détails plus techniques expliquant pourquoi il s’agit d’une meilleure approche, et éventuellement d’une maquette sur la manière de le faire, pourraient être raisonnables. - Scott Pack


J'utilise GVFS / FTP. Je monte mes serveurs FTP distants avec gigolo. Comme ils sont vus comme des répertoires locaux, presque tout ce qui fonctionne sur des fichiers locaux fonctionne. rsync est conçu pour calculer les hachages de fichiers à distance afin de comparer des fichiers sans les transférer, mais le faire avec des fichiers virtuels les transfère quand même. unison et freefilesync fonctionnent normalement bien, mais j'ai rencontré un problème lorsqu'ils veulent renommer un fichier téléchargé, pas de problème de téléchargement. Ceci pourrait être un problème avec gvfs 1.6.1.


4
2017-11-29 17:55