Como ter uma sincronização bidirecional complicada usando rsync preservando exclusões

0

Eu tenho respondido a perguntas semelhantes no stackoverflow, mas elas não cobrem a situação que gostaria de fazer aqui.

Eu tenho todos os meus arquivos de música na minha máquina remota. Gostaria de sincronizá-los com meus dispositivos locais. Vamos dizer que eu quero sincronizá-los nos meus dois laptops. Inicialmente, os laptops não possuem nenhum dos arquivos de música. Eu corro um simples rsync em ambos e obtenho todos os arquivos de música.

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

Agora, gostaria de manter as regras a seguir durante a sincronização.

  • Se eu excluir um arquivo em qualquer um dos laptops, os arquivos não devem ser excluídos no servidor.
  • Se eu excluir um arquivo em qualquer um dos laptops, ele não deverá ser adicionado de volta só porque não foi excluído no servidor.
  • Se eu excluir um arquivo em qualquer um dos laptops, os arquivos não devem ser excluídos nos outros laptops. A exclusão de um arquivo é específica apenas para o laptop no qual eu deletei.
  • Se eu adicionar um novo arquivo em qualquer um dos laptops, o servidor deve obter o novo arquivo. E, eventualmente, todos os outros laptops devem ter esse novo arquivo.
  • Se eu excluir um arquivo no servidor, ele deve ser excluído de todos os laptops.

Como posso alcançar as regras acima com o rsync? Estou pronto para executar mais de um comando em todos os dispositivos / laptops para sincronizar as regras acima.

Deixe-me saber se eu não fiz nenhum ponto claro. Vou editar a pergunta para deixar mais claro.

    
por Goje87 13.06.2013 / 05:52

1 resposta

0

Você terá que controlar manualmente uma exclusão nos laptops e depois executar os comandos apenas dos laptops.

Então, se no laptop1 você deletar a.mp3, você adicionaria o arquivo a um arquivo que chamaremos de ~ / .music_exclude

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

Então, para sincronizar todas as músicas adicionadas para o servidor, exceto aquelas em .music_exclude:

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

Para obter todas as músicas novas do servidor e processar as exclusões:

laptop1$ rsync -azC --exclude-from=~/.music_exclude --delete user@server:path/to/music/ path/to/music/
    
por 13.06.2013 / 06:07