Come avere una complicata sincronizzazione bidirezionale con rsync che preserva le eliminazioni


0

Ho risposto a domande simili su StackOverflow ma non coprono la situazione che vorrei chiedere qui.

Ho tutti i miei file musicali sulla mia macchina remota. Vorrei sincronizzarli con i miei dispositivi locali. Diciamo che voglio sincronizzarli sui miei due laptop. Inizialmente entrambi i laptop non hanno file musicali. Eseguo un semplice rsync su entrambi e ottieni tutti i file musicali.

  Laptop 1 [a.mp3,b.wav,c.mp4] {-------\
                                        \----|
                                             | Server [a.mp3,b.wav,c.mp4]
                                        /----|
  Laptop 2 [a.mp3,b.wav,c.mp4] {-------/

Ora vorrei mantenere le seguenti regole durante la sincronizzazione.

  • Se cancello un file su uno dei laptop, i file non dovrebbero essere cancellati sul server.
  • Se cancello un file su uno dei laptop, non dovrebbe essere ripristinato solo perché non è stato cancellato sul server.
  • Se cancello un file su uno dei laptop, i file non dovrebbero essere cancellati sugli altri laptop. La cancellazione di un file è specifica solo per il laptop su cui ho eliminato.
  • Se aggiungo un nuovo file su uno qualsiasi dei laptop, Server dovrebbe ottenere il nuovo file. E alla fine ogni altro laptop dovrebbe ottenere questo nuovo file.
  • Se cancello un file sul server, dovrebbe essere cancellato su tutti i laptop.

Come posso ottenere le suddette regole con rsync? Sono pronto per eseguire più di un comando su tutti i dispositivi / laptop per avere la sincronizzazione seguendo le regole precedenti.

Fammi sapere se non ho chiarito nulla. Modificherò la domanda per renderla più chiara.


In primo luogo questa non è una domanda per StackOverflow. In secondo luogo non sarai in grado di farlo con rsync a causa del secondo requisito. Avrai bisogno di trovare la tua soluzione / sceneggiatura.
tink

Risposte:


0

Dovrai tenere traccia manualmente di un'esclusione sui laptop e quindi eseguire i comandi solo dai laptop.

Quindi se su laptop1 elimini a.mp3, devi aggiungere il file a un file che chiameremo ~ / .music_exclude

# this is the file .music_exclude on laptop1
a.mp3

Quindi, per sincronizzare eventuali brani aggiunti sul server tranne quelli in .music_exclude:

laptop1$ rsync -azC --exclude-from=~/.music_exclude path/to/music/ user@server:path/to/music/

Per ottenere tutta la nuova musica dal server ed elaborare le eliminazioni:

laptop1$ rsync -azC --exclude-from=~/.music_exclude --delete user@server:path/to/music/ path/to/music/
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.