Rsync: sincronização geral de arquivos / pastas

3

Eu tenho um servidor de arquivos, que é responsável por puxar uma árvore de pastas de várias estações de trabalho diariamente. Meu método atual para isso é usando rsync, (que funciona muito bem desde que os nomes de diretório e / ou arquivos permaneçam os mesmos), no entanto, quando arquivos são renomeados ou movidos dentro de subdir1 , o rsync irá copiá-los para o servidor, criando duplicatas.

Preciso encontrar e excluir manualmente arquivos / pastas estranhos que foram deixados no servidor durante as sincronizações anteriores. Observe que não posso usar o sinalizador - delete do rsync porque qualquer sincronização de uma estação de trabalho espelhará essa árvore de pastas específica, em vez de mesclá-las ao servidor.

Diagrama visual:

Server:         Workstation1        Workstation2        Workstation(n)
Folder*         Folder*             Folder*             Folder*
-subdir1        -subdir1            -subdir1            -subdir(n)
  -file1          -file1              -file2              -file(n)
  -file2
  -file(n)
  • Existe um script simples (de preferência no bash, nada extravagante) que pode realizar a exclusão de arquivos / pastas estranhos no caso de um arquivo ser renomeado ou movido para um subdiretório diferente?
  • Existe um programa diferente, muito parecido com o rsync, que pode realizar essa tarefa de forma autônoma e de maneira muito mais simples? Eu olhei para o uníssono, mas não gostei do fato de que ele mantém um banco de dados local para as informações de sincronização.
  • Alguma dica sobre como devo lidar com isso?

Obrigado por sua ajuda.

EDITAR: Eu tentei uníssono recentemente e posso dizer com segurança que está fora de questão agora. O unison é uma ferramenta de sincronização bidirecional e, a partir do meu teste, ele espelha os arquivos existentes no servidor para todas as estações de trabalho. - Isso é indesejado.

preferencialmente, eu gostaria que os arquivos / pastas ficassem dentro de suas respectivas estações de trabalho e simplesmente se fundissem com o servidor. Sincronização unidirecional AKA; mas com renomes / movimentos propagados para o servidor.

Eu posso ter que procurar em Git / Mercurial / Bazaar como mencionado por kyle , mas ainda não tem certeza se eles estão aptos para o trabalho.

    
por Rey Leonard Amorato 22.03.2012 / 19:11

1 resposta

4

Eu acho que uníssono ou mesmo Git / Mercurial / Bazaar pode ser uma escolha melhor para isso.

Um script bash seria extremamente difícil de fazer, já que a renomeação de um arquivo seria impossível de diferenciar da criação de um novo arquivo, que é o que você está usando com o rsync.

Se fosse eu, tentaria usar o Git ou o Mercurial. Isso provavelmente exigiria um treinamento adicional do usuário, mas seria realmente a melhor opção. Além disso, oferece o benefício do controle de versão para que você possa reverter os erros.

    
por 22.03.2012 / 19:22