web-dev-qa-db-fra.com

Comment utiliser rsync sur FTP

Tout unix:

J'ai la ligne cmd suivante qui fonctionne bien.

rsync -avr -e ssh /home/dir [email protected]:/home/

Mais je dois le configurer maintenant pour rsync sur un serveur distant qui ne dispose que d'un serveur FTP. Comment dois-je procéder?

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

191
bumperbox

Non. rsync ne peut pas faire cela pour vous, c'est un protocole qui lui est propre et ne fonctionne pas via FTP.

Vous pourriez cependant vouloir 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.

80
serverhorror

rsync ne fonctionnera pas pour vous pour les raisons mentionnées par d'autres. Cependant, lftp et ncftp les deux ont des modes "miroir" qui répondront probablement à vos besoins.

J'utilise ceci pour pousser des trucs de mon répertoire local vers un hébergeur ftp ou sftp:

lftp -c "set ftp:list-options -a;
open ftp://user:[email protected]; 
lcd ./web;
cd /web/public_html;
mirror --reverse --delete --use-cache --verbose --allow-chown  
--allow-suid --no-umask --parallel=2 --exclude-glob .svn"
163
easel

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

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

exclude-glob

, qui exclut les noms de fichiers en 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"

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

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

123
GabrieleV

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

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

  1. Sudo apt-get install curlftpfs

  2. Assurez-vous que le module 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 en êtes satisfait ou si vous ne voulez pas le faire à chaque fois, vous pouvez l'ajouter à votre fstab (généralement dans /etc/fstab):

curlftpfs#user:[email protected] /path/to/ftp/folder/ Fuse auto,user,uid=1000,allow_other 0 0

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

Soyez avisé cependant de deux choses:

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

Il y a weex ...

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

16
Johan

rsync ne fonctionne pas sur ftp. Du côté distant, il a besoin du démon rsync ou d'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 les tâches ftp comme "lftp".

9
Ian Kelling

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

8
pauska

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

wget -m ftp: // nom d'utilisateur: [email protected]

7
Aaron

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

5
shaftmx

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

4
Papou

La solution de Jonas S peut être utile selon les circonstances, par exemple si vous avez une vitesse de téléchargement élevée et un téléchargement lent, la vérification des fichiers sur le serveur peut être relativement plus rapide que le téléchargement inutile de fichiers.

Vous souhaitez probablement utiliser CurlFTPFS, cependant: http://packages.ubuntu.com/search?suite=default&section=all&Arch=any&searchon=names&keywords=curlftpfs

Bien que, généralement, il est préférable d'utiliser un client FTP normal au lieu de rsync.

3
user25738

Si vous souhaitez automatiser la tâche, utilisez lftp car vous pouvez créer un script comme certaines personnes l'ont posté ci-dessus, vous pouvez tout écrire très facilement à votre goût, si vous recherchez une solution unique (c'est-à-dire que vous devez télécharger un site Web entier via ftp/déplacez-le sur un autre serveur) utilisez ncftp, c'est simple, installez-le s'il n'est pas déjà installé:

apt-get install ncftp

ou

yum install ncftp

(Désolé les distributions non basées sur Debian/Red Hat ..)

une fois installé, ouvrez ncftp dans le terminal puis tapez:

open -u ftpusername ftp.thedomain.com

Il vous demandera le mot de passe, entrez-le, puis:

get -R /home/remotewebsite/public_html/ /home/localwebsite/public_html/

Il fera le reste du travail pour vous .. bonne chance

2
desdecode

Je ne pense pas que vous pourrez le faire, le serveur sur lequel vous essayez de Rsync n'aura qu'un serveur FTP en cours d'exécution, il ne comprendra pas les commandes que Rsync lui envoie.

Si la raison pour laquelle vous souhaitez le faire est que vous n'avez accès qu'au port 21, mais que vous avez le contrôle du serveur, vous pouvez modifier le port que Rsync écoute sur le serveur, mais cela n'est évidemment utile que si vous ne le faites pas. voulez utiliser FTP sur ce port.

2
Sam Cogan

rclone est un joli logiciel qui effectue la synchronisation d'annuaire sur ftp et de nombreux autres protocoles, y compris les fournisseurs de stockage cloud (Amazon S3, Dropbox, Google Drive). Il peut se synchroniser vers/depuis n'importe quelle combinaison de stockage local ou distant.

Pour configurer une télécommande ftp, suivez ces instructions .

Une fois cela fait, l'opération de synchronisation est:

rclone sync /home/dir FTP_REMOTE:/home --progress 
1
bernie

L'utilisation de "sitecopy" ou "mirror" peut vous faire économiser beaucoup de bande passante.

Ils gèrent tous deux une mise à jour incrémentielle efficace.

1
Kan-Ru Chen

J'ai créé mon propre outil de ligne de commande pour cela: ftpsync

Pourquoi? Parce qu'il est simple et élégant, d'autres outils nécessitent beaucoup de dépendances, parfois à la compilation, parfois ne fonctionnent pas (par exemple lftp sur MacOs High Sierra). Ftpsync est écrit en Python pur, ne nécessite pas de bibliothèques tierces et il est petit, vous pouvez simplement inclure le fichier dans votre projet.

Utilisation: cd dans le répertoire de votre projet et tapez:

ftpsync user:[email protected]/remote/dir --delete

--delete signifie la suppression de fichiers distants qui n'existent pas localement.

Si vous ne voulez pas synchroniser, mais exécutez simplement la commande ftp brute, utilisez:

ftpsync -c '...'

Il est utile pour certaines opérations simples comme l'envoi de fichiers et le renommer:

ftpsync -c 'PASV; TYPE I; STOR some_file.ext; RNFR some_file.ext; RNTO some_file_renamed.ext'
0
superdario128

Il y a aussi wput:

wput --timestamping --reupload --dont-continue source-files ftp://target.Host/dir

Le nom d'utilisateur et le mot de passe sont lus à partir de ~/.netrc. Sinon, si vous n'êtes pas particulièrement concerné par la sécurité, vous pouvez les fournir sous la forme ftp: // username: [email protected] .

0
Ole Wolf