Eu tenho usado com sucesso o rsync para sincronizar meus diretórios pessoais entre meu laptop e meu netbook (ambos usando ext4 com Linux). Meu único problema é que de vez em quando eu gosto de reorganizar completamente certos diretórios, e o rsync vê isso como exclusões e criação de novos arquivos, o que o torna muito lento e ineficiente.
Alguém sabe de um bom software que lida com arquivos se move bem?
Descobri que o uníssono deve ser capaz disso, mas não parece funcionar na prática. Testei o uníssono sincronizando dois diretórios locais, cada um com um arquivo grande, e ele ainda detectou minha movimentação como uma exclusão + criação e, na verdade, era ainda mais lenta que o rsync .
Além disso, se eu me lembro corretamente da minha observação do código-fonte do uníssono há alguns meses, ele tentou fazer algo como fazer somas sha - e eu não quero que minha solução ideal faça somas sha - isso é muito lento em geral arquivos / diretórios. Eu gostaria de algo que note coisas como:
"A última contraparte de origem deste arquivo parece ter sido excluída e há um novo arquivo em outro lugar na árvore de diretórios de origem que tem o mesmo número de mdate, tamanho e número de inode, então eu assumirei que essa foi uma mudança e mova sua contraparte de destino adequadamente em vez de excluir ou copiar ".
É importante para mim poder sincronizar essas máquinas rapidamente.
Alguma sugestão?
fonte
O Unison faz o que você deseja, mas apenas para sincronização remota. Tente usar
ssh://localhost/path/to/dir
como uma das raízes.O Unison baseia suas decisões no conteúdo do arquivo, não controla os números dos inodes.
fonte
Você pode manipular arquivos movidos e renomeados com o rsync se os sistemas de arquivos no diretório de origem e destino tiverem suporte para links físicos. A idéia é permitir que o rsync reconstrua os links físicos antes da transferência real. Você pode encontrar uma boa explicação aqui
Acabamos com uma solução simples que cria uma árvore oculta de links físicos dentro do diretório de origem / destino, o script básico pode ser assim:
Eu tenho um script de exemplo no GitHub . Mas eu recomendo que você faça uma grande quantidade de testes antes de usar esse método na produção.
fonte
Se você deseja sincronizar arquivos entre várias máquinas, pode simplesmente usar um sistema de controle de versão centralizado como o Subversion (ou FSVS, que usa SVN como back-end). A parte boa é que tudo em sua / home (que você adiciona ao controle de versão) é versionado e pode ser facilmente sincronizado com outras máquinas ou revertido.
fonte
O lsyncd também lida com arquivos movidos com o comportamento rsync + ssh, embora com um pouco de bugs (eu recebo cerca de 15% de movimentos manipulados como exclusão / cópia, ainda para descobrir o porquê). Na maioria das vezes funciona.
fonte