synchronisation bidirectionnelle avec rsync

11

J'essaie de configurer la synchronisation bidirectionnelle ou bidirectionnelle avec rsync. Dans mon cas, je n'ai besoin que de supprimer les fichiers lors de la synchronisation de B vers A. Donc, je pensais à exécuter rsync deux fois comme suit:

rsync -rtuv ./A/ ./B/
rsync -rtuv --delete ./B/ ./A/

Ce problème avec cette solution est que lorsque j'exécute rsync (B-> A) qui serait juste après l'exécution de rsync (AB), tout nouveau fichier créé entre la synchronisation sera également supprimé.

Existe-t-il un moyen de spécifier un horodatage comme condition qu'il ne supprime le fichier que s'il a été créé avant cette date / heure.

Mise à jour:

Je comprends qu'il existe une solution à l'unisson, mais le problème avec l'unisson doit être installé aux deux extrémités. Je synchronise avec un serveur distant et je ne peux pas installer à l'unisson sur l'extrémité distante.

Raza
la source
Il y a une question très similaire avec quelques réponses supplémentaires ici: stackoverflow.com/questions/2936627/two-way-sync-with-rsync
Thomas

Réponses:

4

Vous pouvez essayer osync qui est conçu exactement pour cette tâche. Une fois, j'ai configuré une séquence complexe de commandes rsync pour faire le travail, mais j'utilise maintenant osync.

https://github.com/deajan/osync

Il utilise rsync en interne, il devrait donc convenir à toutes les situations où vous pourriez utiliser rsync.

Mark Perryman
la source
1
Merci, Mark. J'étais sur le point de répondre à ma propre question. J'ai trouvé un script très similaire appelé bsync ( github.com/dooblem/bsync ), fondamentalement, il utilise diff pour comprendre ce qui doit être synchronisé. Étant donné que je ne m'attends pas à des conflits de synchronisation, je modifie également un peu ce script pour qu'il s'exécute silencieusement lorsqu'il s'exécute avec un travail cron.
Raza
7

rsyncn'est pas le bon outil pour cette tâche, pour exactement les raisons que vous avez rencontrées. Envisagez plutôt d'utiliser unison:

unison A/ B/

La première fois que vous l'exécutez, il identifiera les fichiers qui se trouvent uniquement Aet ceux qui s'y trouvent B. Il signalera également ceux qui se trouvent aux deux endroits et vous demandera d'identifier ceux qui doivent être remplacés.

La prochaine fois que vous exécutez ce copiera les changements de Ala Bet aussi Bà A, diriger la circulation tous les fichiers qui ont été modifiés dans les deux endroits pour la recherche manuelle.

mkdir A B
date > A/date
who > B/who
unison A/ B/
# Lots of output from unison, showing synchronisation

ls A
date    who
ls B
date    who

date > A/date
unison A/ B/
# Lots of output from unison, showing synchronisation

Il existe un certain nombre d'indicateurs utiles pour unisonaider à automatiser le processus en définissant des hypothèses et en réduisant ainsi le nombre de questions qui vous sont posées lors de la synchronisation.

roaima
la source
3
J'ai vu une solution à l'unisson, mais le problème est que je dois installer les deux extrémités. Je synchronise avec une télécommande et je ne peux pas installer à l'unisson sur l'extrémité distante.
Raza
1
Cela n'aide pas le PO, mais je cherchais à l' unisson . Je vois qu'il y a des paquets Debian et il prend en charge le transport ssh.
Ted
1
Il existe des possibilités d'utiliser à l'unisson sans l'installer sur le serveur, voir les commentaires dans cette réponse stackoverflow.com/a/2936711 qui pointe vers i3vi3v.wordpress.com/2013/01/09/…
Thomas
-1

Ce dont vous avez vraiment besoin, c'est de Rclone . Rclone est rsync pour le stockage cloud (box, dropbox, nextcloud, ftp etc.) et le stockage local.

user1461607
la source
2
Comment installer et utiliser rclone pour résoudre leur problème?
Jeff Schaller
3
rclone n'a pas encore de synchronisation bidirectionnelle.
sean