216 votes

Comment utiliser rsync sur FTP

Tout unix :

J'ai la ligne cmd suivante qui fonctionne bien.

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

Mais j'ai besoin de le configurer maintenant pour rsynchroniser avec un serveur distant qui n'a qu'un serveur FTP sur lui. Comment dois-je m'y prendre ?

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

21 votes

C'est un peu comme demander comment utiliser HTTP sur IRC, ou comment utiliser FTP sur SMTP...

2 votes

Peut-être pourriez-vous nous expliquer les raisons qui vous poussent à faire cela, puis nous pourrons vous aider à trouver une solution viable.

1 votes

Essentiellement j'essayais d'automatiser une sauvegarde à partir d'un serveur d'hébergement partagé, et je ne comprenais pas comment rsync fonctionnait. j'ai déménagé vers un vps maintenant, et je n'ai plus la limitation du ftp.

183voto

FDM Points 346

rsync ne va pas fonctionner pour vous pour les raisons que d'autres ont mentionnées. Cependant, lftp y ncftp Les deux ont des modes "miroir" qui répondront probablement à vos besoins.

Je l'utilise pour pousser des choses de mon répertoire local vers 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"

3 votes

Lftp est très bien. Un autre dont je viens de découvrir l'existence est wput qui a une limitation intégrée de la bande passante.

0 votes

Je suggère d'ajouter "set ftp:use-mdtm-overloaded true" pour que le mtime du fichier soit le même que celui de l'original (si l'on utilise l'inverse, c'est-à-dire sans inversion).

0 votes

Voir aussi stackoverflow.com/a/70058912/9134997 pour les options de ligne de commande de lftp. Il existe de très bons paramètres pour la synchronisation des données !

133voto

GabrieleV Points 1619

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

Je vous suggère de paramétrer le script, et d'utiliser la fonction

exclude-glob

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 : s'assurer que le répertoire cible existe, sinon la commande cd échouera, donc l'opération y compris la suppression d'arbres de fichiers aura lieu dans le mauvais répertoire (racine) !

J'ai mis à jour script de sorte que --delete est désactivée par défaut, activez-la en décommentant l'option DELETE= command .

0 votes

Ça m'a beaucoup aidé. Mais j'ai dû supprimer le "set ftp:list-options -a ;" qui perturbait tout.

0 votes

Réponse brillante GabrieleV - Ce script est brillamment construit ! Merci

1 votes

Existe-t-il quelque chose comme cela qui fait la même chose sur SFTP (FTPS ?)?

92voto

Martin M. Points 6418

Ce n'est pas le cas. rsync ne peut pas le faire pour vous, c'est un protocole qui lui est propre et qui ne fonctionne pas sur FTP.

Vous pourriez, cependant, vouloir essayer csync . IIRC il fournit un comportement similaire à rsync sur HTTP. Je ne peux pas dire si cela fonctionne sur FTP, vous devrez l'essayer.

3 votes

En regardant le page web csync Il supporte sftp mais il n'y a aucune mention de support pour ftp.

28voto

En fonction de ce que vous essayez de faire, une autre approche complètement différente peut être utilisée. curlftps pour monter un dossier ftp, et ensuite peut-être rsync les deux dossiers "locaux".

L'installation est différente selon votre distro donc je ne peux pas généraliser, mais vous devez installer fuse y curlftpfs (probablement que Debian a déjà fuse installer par défaut), alors :

  1. sudo apt-get install curlftpfs

  2. Assurez-vous que le fuse 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 si vous ne voulez pas le faire à chaque fois, vous pouvez l'ajouter à votre fstab (généralement dans la section /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 fusibles est chargé avant.

Attention toutefois à deux choses :

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

0 votes

FTP Fuse et rsync sont les plus proches de la question mais sont clairement insensés pour tout ce qui n'est pas un petit ensemble de petits fichiers.

1 votes

Pourquoi serait-ce insensé ? Par défaut rsync stat()s, il ne compare pas le contenu. Cela peut être fait par ls -l avec un client ftp.

0 votes

J'ai effectivement essayé (via rsnapshot) et cela n'a pas fonctionné, chaque fichier retournait une erreur, montrant que rsync ne pouvait pas créer de lien. Donc l'utilisation de lftp en conjonction avec rsnapshot a fonctionné.

17voto

Johan Points 795

Il y a weex ...

Weex est un utilitaire conçu pour automatiser la tâche de maintenir à distance à distance d'une page Web ou d'une autre archive ou d'autres archives FTP. Il synchronisera un ensemble de fichiers locaux vers un serveur distant en en effectuant des téléchargements et des suppressions à distance selon les besoins.

3 votes

Cela fonctionne comme un charme ! Vous le faites fonctionner comme ceci : $ weex yourFTPconfigName Voici le manuel linuxcertif.com/man/1/weex

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X