125 votes

Comment synchroniser dans les deux sens ?

Je veux utiliser rsync pour synchroniser deux répertoires dans les deux sens.

Je fais référence à la synchronisation au sens classique ( pas comme on l'entend dans les manuels de rsync) :
Je veux mettre à jour les répertoires dans les deux sens , en fonction de celui qui est plus récent .

Cela peut-il être fait par rsync (de préférence dans une optique Linux) ?
Sinon, quelles autres solutions existent ?

4 votes

Je crois qu'en serverfault.com vous obtiendrez de meilleures réponses.

115voto

jsight Points 16025

Il suffit de l'exécuter deux fois, avec le mode "plus récent" (drapeau -u ou --update) plus -t (pour copier l'heure de modification du fichier), -r (pour les dossiers récursifs), et -v (pour une sortie verbeuse pour voir ce qu'il fait) :

rsync -rtuv /path/to/dir_a/* /path/to/dir_b
rsync -rtuv /path/to/dir_b/* /path/to/dir_a

Cela ne gère pas les suppressions, mais je ne suis pas sûr qu'il y ait une bonne solution à ce problème avec seulement une synchronisation périodique.

4 votes

Puisque la question portait sur rsync, je vais marquer cette réponse comme correcte.

3 votes

Mais vous avez également demandé d'autres solutions et Unison fait un meilleur travail, sinon je n'aurais jamais mentionné un autre outil. Je comprends que vous ayez peut-être des circonstances spécifiques qui favorisent l'utilisation de rsync.

1 votes

Sheesh, tu as 6 upvotes et tu te plains encore ? <j/k> Unison est une solution vraiment intéressante, et je suis content que tu en aies parlé :)

75voto

MaD70 Points 2902

Est-ce que tu sais Unison File Synchronizer ?

Unison est un outil de synchronisation de fichiers pour Unix et Windows. Il permet à deux répliques d'une collection de fichiers et fichiers et de répertoires sur différents différents (ou différents disques sur le même même hôte), de les modifier séparément, puis de les mises à jour en propageant les modifications en propageant les modifications de chaque réplique à l'autre. ...

Notez également qu'il est résilient aux défaillances :

L'Unison résiste à l'échec. Il est attention à laisser les répliques et ses propres propres structures privées dans un état état sensible à tout moment, même en cas de de terminaison anormale ou d'échec de communication.

3 votes

+1. L'unisson est le meilleur moyen d'y parvenir. La double synchronisation est difficile à obtenir et ne gère pas du tout les suppressions.

0 votes

Oui, l'Unison est résistante aux fautes. Je mets à jour ma réponse pour le souligner.

7 votes

Je n'avais pas entendu parler d'Unison. C'est grâce à vous que j'ai refait mes scripts de sauvegarde à la maison aujourd'hui.

6voto

Mayank Agarwal Points 99

Merci Jsight

rsync -urv --progress dir_a dir_b && rsync -urv  --progress dir_b dir_a

Ainsi, la deuxième synchronisation se produirait immédiatement après la fin de la première synchronisation. Si la structure du répertoire est énorme, cela permet de gagner du temps, car il n'est pas nécessaire de s'asseoir devant le PC. Si la structure est énorme, supprimez le verbeux et la progression.

rsync -ur dir_a dir_b && rsync -ur dir_b dir_a

1 votes

Je me demande si je dois ajouter -t pour copier l'heure de modification du fichier. Y a-t-il une raison pour laquelle je ne devrais pas ajouter -t ?

0 votes

@Chrips Non, je ne pense pas. Il semble que le but de cette réponse était juste de montrer que vous pouvez utiliser && entre les deux commandes pour exécuter automatiquement la deuxième commande immédiatement après la première (si la première commande est réussie), par opposition à l'exécution manuelle de l'une après l'autre comme dans la réponse de @jsight. De plus, je pense que la réponse de @jsight a été modifiée pour inclure l'élément suivant -t après que cette réponse ait été postée.

1voto

Bohdan Points 1882

Utilisez rsync <OPTIONS> [hostname:]source-dir [hostname:]dest-dir

par exemple :

rsync -pogtEtvr --progress --bwlimit=2000 xxx-files different-stuff

Synchronisera xxx-files vers different-stuff/xxx-files. Si different-stuff/xxx-files n'existe pas, il le créera - c'est-à-dire le copiera.

-pogtEtv - juste un tas d'options pour préserver les métadonnées des fichiers, plus v - verbeux et r - récursif

--progress - afficher la progression de la synchronisation en temps réel - très utile si vous copiez des fichiers volumineux

--bwlimit=2000 - définit la vitesse maximale de la copie/synchronisation (bw = bande passante)

P.S. rsync est d'une importance capitale lorsque vous travaillez sur un réseau ; dans le cas d'une machine locale, vous pouvez utiliser des commandes telles que cp .

Bonne chance !

0voto

user3571127 Points 1

Si vous voulez synchroniser dans les deux sens et aussi activer la suppression des fichiers utilisez les commandes suivantes

rsync -u -r --delete dir_a dir_b
rsync -u -r --delete dir_b dir_a

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X