web-dev-qa-db-fra.com

Synchronisation bidirectionnelle avec rsync

J'ai un dossier a/et un dossier distant A /. Je lance maintenant quelque chose comme ça sur un Makefile:

get-music:
 rsync -avzru server:/media/10001/music/ /media/Incoming/music/

put-music:
 rsync -avzru /media/Incoming/music/ server:/media/10001/music/

sync-music: get-music put-music

quand je fais de la synchronisation musicale, il récupère d'abord tous les diffs du serveur au local, puis l'inverse, en envoyant tous les diffs du local au serveur.

Cela ne fonctionne très bien que s’il n’ya que des mises à jour ou de nouveaux fichiers dans le futur. S'il y a des suppressions, cela ne fait rien.

Dans rsync, il existe des options --delete et --delete-after pour vous aider à réaliser ce que je veux, mais le fait est que cela ne fonctionne pas avec une synchronisation bidirectionnelle.

Si je veux supprimer des fichiers du serveur sur un syn, lorsque des fichiers locaux ont été supprimés, cela fonctionne, mais si, pour une raison quelconque (expliquée plus loin), j'ai des fichiers qui ne sont pas sur le serveur mais existent localement et ils ont été supprimés, Je veux localement les supprimer et non le serveur copié (comme cela se produit).

La chose est que j'ai 3 machines dans le contexte:

  1. bureau
  2. carnet
  3. serveur domestique

Ainsi, parfois, le serveur aura des fichiers qui ont été supprimés avec une synchronisation de cahier, par exemple, puis, lorsque je lance une synchronisation avec mon bureau (où les fichiers de serveur supprimés existent toujours), je veux que ces fichiers soient supprimés et non supprimés. copié à nouveau sur le serveur.

Je suppose que cela n’est possible qu’avec une base de données et un suivi des opérations: P

Des solutions plus simples? Merci.

90
mwm

Essayez Unison: http://www.cis.upenn.edu/~bcpierce/unison/

Syntaxe: unison dirA/ dirB/

Unison vous demande quoi faire lorsque les fichiers sont différents, mais vous pouvez automatiser le processus en utilisant les éléments suivants qui acceptent les options par défaut (non conflictuelles):

unison -auto dirA/ dirB/

unison -batch dirA/ dirB/ ne pose aucune question et écrit pour indiquer combien de fichiers ont été ignorés (car ils étaient en conflit).

61
alex

Vous pouvez également essayer bitpocket: https://github.com/sickill/bitpocket

8
saif

Essaye ça,

get-music:
 rsync -avzru --delete-excluded server:/media/10001/music/ /media/Incoming/music/

put-music:
 rsync -avzru --delete-excluded /media/Incoming/music/ server:/media/10001/music/

sync-music: get-music put-music

Je viens de tester cela et cela a fonctionné pour moi. J'effectue une synchronisation bidirectionnelle entre Windows7 (utilisant cygwin avec le package rsync installé) et le serveur de fichiers FreeNAS (FreeNAS s'exécute sur FreeBSD avec le package rsync pré-installé).

6
Chris Collins

Vous pouvez utiliser Osync: http://www.netpower.fr/osync , qui est basé sur rsync avec propagation de suppression intelligente. Il propose également de nombreuses options, telles que la reprise d'une exécution interrompue, la suppression logicielle et le contrôle du temps.

5
Orsiris de Jong

Étant donné que la question initiale concerne également un ordinateur de bureau et un ordinateur portable et des exemples de fichiers musicaux (il utilise donc probablement une interface graphique), je mentionnerais également l'un des meilleurs programmes bidirectionnels, multi-plateformes, gratuits et à code source ouvert à ce jour: - FreeFileSync .

Son interface graphique, très rapide et intuitive, est fournie avec le filtrage et de nombreuses autres options, notamment la possibilité de se connecter à distance, de visualiser et de gérer de manière interactive les "collisions" (par exemple, des fichiers avec des horodatages similaires) et de basculer entre le transfert bidirectionnel, la mise en miroir et le transfert. bientôt.

4
Dario Fumagalli

Vous pouvez essayer csync , c'est le moteur de synchronisation sous le capot de owncloud .

3
marton78

J'utilise maintenant SparkleShare https://www.sparkleshare.org/

fonctionne sur mac, linux et windows.

1
mwm

Je ne sais pas si cela fonctionne avec deux synchronisations, mais pour que l'option --delete fonctionne, vous devez également ajouter le paramètre --recursive.

0
Boardy

Rclone est ce que vous recherchez. Rclone ("rsync pour le stockage en nuage") est un programme en ligne de commande permettant de synchroniser des fichiers et des répertoires vers et à partir de différents fournisseurs de stockage en nuage, y compris des systèmes de fichiers locaux. Rclone s'appelait auparavant Swiftsync et est disponible depuis 2013.

0
user1461607