Synchroniser un répertoire local avec un répertoire distant sous Linux

14

J'ai un dossier contenant quelques fichiers et un espace sur un serveur Web. Je veux faire une synchronisation bidirectionnelle entre le dossier local et le dossier distant sous Linux, juste au moment de la modification. Comment puis-je faire cela? btw Je ne peux rien installer sur le serveur, à toutes fins utiles, c'est juste de l'espace.

Remarque: J'ai déjà mis en place des paires de clés rsa, afin que cela puisse se produire en silence.

Andrew Redd
la source

Réponses:

12

L'outil de choix pour la synchronisation unidirectionnelle est rsync, et l'outil de choix pour la synchronisation bidirectionnelle est Unison . Les deux nécessitent que l'exécutable soit disponible des deux côtés. Si vous pouvez rendre un fichier exécutable côté serveur, supprimez le binaire unisson et rendez-le exécutable.

Si vous avez Linux, * BSD, Solaris ou Mac OS X localement, vous pouvez probablement utiliser un système de fichiers FUSE pour faire apparaître l'espace du serveur Web comme un système de fichiers local - sshfs devrait fonctionner car vous semblez avoir un accès ssh. Utilisez ensuite l'unisson «localement».

Notez également que la plupart des logiciels de contrôle de version (CVS / Subversion ainsi que VCS distribués) ont la synchronisation comme une fonction en passant (enregistrement sur une machine et sortie sur l'autre).

Gilles 'SO- arrête d'être méchant'
la source
4

S'il est installé sur le serveur, utilisez rsync-le pour ce travail.

Pour le faire dans les deux sens, faites cela (citation de http://forums11.itrc.hp.com/service/forums/questionanswer.do?admit=109447626+1285799008594+28353475&threadId=1278777 ):

Pour synchroniser un répertoire bidirectionnellement /src/foosur hostApour /dest/foole hostB, y compris tous les sous-répertoires, vous devez exécuter ces commandes sur hostA:

rsync -auz /src/foo hostB:/dest 
rsync -auz hostB:/dest/foo /src

La première commande pousse tous les fichiers les plus récents hostAvershostB .

La deuxième commande tirera tous les fichiers les plus récents hostBvershostA . Les options critiques sont:

lors de la copie, vous devez conserver les heures de modification des fichiers. -afait cela et d'autres choses;

Si vous souhaitez conserver uniquement les temps de modification, utilisez -t plutôt.

Pour ignorer tous les fichiers plus récents sur la destination: procédez comme -usuit.

tante
la source
pour autant que j'ai lu, rsync ne fait pas de direction bidirectionnelle et quand j'essaye, cela me donne l'erreur "incompatibilité de version de protocole - votre shell est-il propre?"
Andrew Redd
hostanswers.net/linux-hosting/rsync-protocol-version-mismatch peut vous aider à corriger la différence de version. Pour la chose bidirectionnelle, j'ai mis à jour ma réponse.
tante
1
Rsync n'est pas du tout adapté à la synchronisation bidirectionnelle. D'une part, il ne vous avertira pas en cas de conflit. Utilisez plutôt Unison, c'est le bon outil pour le travail.
Gilles 'SO- arrête d'être méchant'
1
Cela casse horriblement si le serveur A est à l'avenir du serveur B. Dans mon cas, j'ai 13 heures d'avance sur le serveur distant.
Tim Post
1

Chaque fois que vous avez besoin d'une synchronisation entre deux dossiers rsyncest un excellent choix flexible. Le problème est que rsync ne prend pas en charge le protocole ftp. CurlFtpFS est une bonne solution de contournement :

CurlFtpFS est un système de fichiers pour accéder aux hôtes FTP basé sur FUSE et libcurl.

Avec curlFtpFs, il est assez facile d'inclure un dossier ftp distant dans votre système de fichiers.

Voici un court exemple qui montre l'utilisation des deux outils:

curlftpfs -r -s ftp.foobar.com /foo
rsync -a /foo/ /bar
umount /foo

Lisez la page de manuel pour plus d'informations.

Si vous ne voulez pas un tel effort pour installer curlFtpFS et que vous souhaitez simplement garder certains fichiers synchronisés, il existe de nombreux outils ftp qui offrent de telles fonctionnalités de synchronisation:

  • FTPSync.pl - script PERL simple pour synchroniser un répertoire local et un répertoire distant
  • weex - un client FTP non interactif pour la mise à jour des pages Web
  • filezilla - Client FTP GUI avec beaucoup de fonctionnalités
  • ...
écho
la source
1. Rsync n'est pas bon pour la synchronisation bidirectionnelle , utilisez plutôt Unison. 2. D'où vient le FTP? la mention des clés RSA dans la question suggère plutôt ssh (et donc sshfs).
Gilles 'SO- arrête d'être méchant'
Vous avez raison, FTP n'est pas mentionné dans la question. Pour être honnête, je pense que c'était une combinaison de "l'espace web" et "c'est juste de l'espace". et un peu de ma fatigue hier.
echox