sincronizzazione bidirezionale con rsync


11

Sto cercando di configurare la sincronizzazione bidirezionale o bidirezionale con rsync. Nel mio caso ho solo bisogno di eliminare i file durante la sincronizzazione da B ad A. Quindi, stavo pensando di eseguire rsync due volte come segue:

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

Questo problema con questa soluzione è che quando eseguo rsync (B-> A) che sarebbe subito dopo l'esecuzione di rsync (AB), anche ogni nuovo file creato tra la sincronizzazione verrà rimosso.

C'è un modo in cui posso specificare un timestamp come condizione che elimini il file solo se creato prima di questa data / ora.

aggiornato:

Capisco che esiste una soluzione all'unisono ma il problema con l'unisono è richiesto per l'installazione su entrambe le estremità. Mi sto sincronizzando con un server remoto e non riesco a installare all'unisono sull'estremità remota.


C'è una domanda molto simile con qualche altra risposta qui: stackoverflow.com/questions/2936627/two-way-sync-with-rsync
Thomas

Risposte:


4

Potresti provare osync che è progettato proprio per questo compito. Una volta ho impostato una complessa sequenza di comandi rsync per fare il lavoro, ma ora uso osync.

https://github.com/deajan/osync

Utilizza rsync internamente, quindi dovrebbe essere adatto a qualsiasi situazione in cui è possibile utilizzare rsync.


1
Grazie Mark. Stavo per rispondere alla mia domanda. Ho trovato uno script molto simile chiamato bsync ( github.com/dooblem/bsync ) in pratica usa diff per capire cosa deve essere sincronizzato. Dal momento che non mi aspetto alcun conflitto nella sincronizzazione, modifico anche un po 'questo script in modo che funzioni silenziosamente quando viene eseguito con un processo cron.
Raza,

7

rsyncè lo strumento sbagliato per questa attività, esattamente per i motivi che hai riscontrato. Invece, considera l'utilizzo di unison:

unison A/ B/

La prima volta che lo eseguirai, identificherà i file che si trovano in modo univoco Ae quelli che si trovano in modo univoco B. Contrassegnerà anche quelli che si trovano in entrambi i luoghi e ti chiederà di identificare quale deve essere sovrascritto.

La prossima volta che eseguirai questo, copierà le modifiche da Aa Be anche Ba A, contrassegnando tutti i file che sono stati modificati in entrambe le posizioni per la risoluzione manuale.

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

Sono disponibili numerosi flag utili per i unisonquali è possibile automatizzare il processo definendo i presupposti e riducendo quindi il numero di domande poste durante la sincronizzazione.


3
Ho visto una soluzione all'unisono ma il problema è che mi viene richiesto di installare su entrambe le estremità. Mi sto sincronizzando con un telecomando e non riesco a installare all'unisono sull'estremità remota.
Raza,

1
Non aiuta l'OP, ma stavo cercando all'unisono . Vedo che ci sono pacchetti Debian e supporta il trasporto ssh.
Ted

1
Ci sono possibilità di utilizzare all'unisono senza installarlo sul server, si vedano i commenti a questa risposta stackoverflow.com/a/2936711 che punta al i3vi3v.wordpress.com/2013/01/09/...
Thomas

-1

Ciò di cui hai veramente bisogno è Rclone . Rclone è rsync per l'archiviazione cloud (box, dropbox, nextcloud, ftp ecc.) E l'archiviazione locale.


2
Come installerebbero e utilizzerebbero rclone per risolvere il loro problema?
Jeff Schaller

3
rclone non ha ancora la sincronizzazione bidirezionale.
sean,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.