it-swarm.dev

Sincronizzazione bidirezionale con rsync

Ho una cartella a/e una cartella remota A /. Ora eseguo qualcosa di simile su 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

quando creo musica di sincronizzazione, prima ottiene tutte le differenze da server a locale e poi il contrario, inviando tutte le differenze da locale a server.

Funziona molto bene solo se ci sono solo aggiornamenti o nuovi file in futuro. Se ci sono eliminazioni, non fa nulla.

In rsync ci sono --delete e --delete-after opzioni per aiutare a realizzare quello che voglio ma il fatto è che non funziona con una sincronizzazione bidirezionale.

Se voglio eliminare i file del server su un syn, quando i file locali sono stati eliminati, funziona, ma se, per qualche motivo (spiegato dopo), ho alcuni file che non sono nel server ma esistono localmente e sono stati eliminati, Desidero rimuoverli localmente e non copiarli dal server (come accade).

Il fatto è che ho 3 macchine nel contesto:

  1. del desktop
  2. taccuino
  3. in casa del server

Quindi, a volte, il server avrà file che sono stati eliminati con una sincronizzazione del notebook, ad esempio, e poi, quando eseguo una sincronizzazione con il mio desktop (dove i file del server eliminati esistono ancora) voglio che questi file vengano eliminati e non copiato di nuovo sul server.

Immagino che ciò sia possibile solo con un database e una traccia delle operazioni: P

Qualche soluzione più semplice? Grazie.

90
mwm

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

Sintassi: unison dirA/ dirB/

Unison chiede cosa fare quando i file sono diversi, ma è possibile automatizzare il processo utilizzando quanto segue che accetta le opzioni predefinite (non in conflitto):

unison -auto dirA/ dirB/

unison -batch dirA/ dirB/ non pone alcuna domanda e scrive per generare quanti file sono stati ignorati (perché in conflitto).

61
alex

Puoi anche provare bitpocket: https://github.com/sickill/bitpocket

8
saif

Prova questo,

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

Ho appena provato questo e ha funzionato per me. Sto eseguendo una sincronizzazione bidirezionale tra Windows 7 (utilizzando Cygwin con il pacchetto rsync installato) e il file server FreeNAS (FreeNAS funziona su FreeBSD con il pacchetto rsync preinstallato).

6
Chris Collins

È possibile utilizzare Osync: http://www.netpower.fr/osync , che è rsync basato sulla propagazione intelligente dell'eliminazione. ha anche più opzioni come la ripresa di un'esecuzione interrotta, la cancellazione graduale e il controllo del tempo.

5
Orsiris de Jong

Poiché la domanda originale riguarda anche un desktop e un laptop e un esempio che coinvolge file musicali (quindi probabilmente sta usando una GUI), vorrei citare anche uno dei migliori programmi bidirezionali, multipiattaforma, gratuiti e open source fino ad oggi: - FreeFileSync .

È basato sulla GUI, molto veloce e intuitivo, include filtri e molte altre opzioni, inclusa la possibilità di connettersi in remoto, visualizzare e gestire in modo interattivo "collisioni" (ad esempio file con timestamp simili) e passare da trasferimento bidirezionale, mirroring e presto.

4
Dario Fumagalli

Si potrebbe provare csync , è il motore di sincronizzazione sotto il cofano della ownCloud .

3
marton78

Ora sto usando SparkleShare https://www.sparkleshare.org/

funziona su Mac, Linux e Windows.

1
mwm

Non sono sicuro che funzioni con la sincronizzazione due ma per far funzionare il --delete devi anche aggiungere il parametro --recursive.

0
Boardy

Rclone è quello che stai cercando. Rclone ("rsync per l'archiviazione cloud") è un programma da riga di comando per sincronizzare file e directory da e verso diversi provider di archiviazione cloud, inclusi i file system locali. Rclone era precedentemente noto come Swiftsync ed è disponibile dal 2013.

0
user1461607