Sincronizando arquivos em duas vias com Unison

Unison é uma ferramenta de cópia de arquivos que usa o mesmo algorítmo do Rsync para permitir a transferência de arquivos em mão dupla, ou seja, manter dois conjuntos de arquivos idênticos, independente de qual deles seja alterado local ou remotamente.

Como funciona

Talvez a explicação pareça confusa, então vou tentar explicar usando um cenário prático. Você tem uma pasta de documentos no seu desktop e quer que esta pasta permaneça sincronizada no notebook.

Se você usar o Rsync para isso, os arquivos novos ou modificados de um lado (PC por exemplo) serão transferidos para o outro (notebook, no caso), mas nunca o inverso.

rsync-pc-notebook
Rsync de arquivos do PC para o notebook

 

Caso algum arquivo seja alterado no notebook e você rode o rsync denovo, suas alterações poderão ser perdidas, exceto você fizer alguns malabarismos com as opções do Rsync para evitar que isso ocorra mas ainda assim você terá que executar o Rsync ao menos duas vezes para transferir os arquivos do PC para o note e depois do note para o PC e com cautela.

rsync-duas-vias-pc-note
Rsync para sincronismo entre o PC e o notebook

 

Usando o Unison não importa de que lado você altere os arquivos eles sempre estarão idênticos em ambos os lados e com apenas um comando, sem maiores riscos.

Unison-PC-notebook
Unison de arquivos entre o PC e o notebook

 

Instalação e uso

A instalação pode ser feita pelo gerenciador de pacotes da sua distribuição.

No Debian/Ubuntu/Mint por exemplo o comando abaixo resolve esta questão:

# apt-get install unison

A utilização do Unison pode ser feita basicamente de dois modos. ou você escreve todos os parâmetros na linha de comandos, tal como faria com qualquer outro programa de cópia (scp, cp, rsync etc) ou você cria arquivos de configuração, chamados de perfil, dentro do diretório de configuração do usuário que normalmente está definido como ~/.unison.

Veja o exemplo abaixo onde eu mantenho em sincronismo a pasta Documentos entre o meu Desktop e o meu Notebook:

$ unison -ui text -auto -batch -ignorearchives ssh://192.168.0.2/Documentos Documentos

Basicamente eu estou dizendo que o Unison deve sincronizar o diretório Documentos da máquina 192.168.0.2 (meu desktop) com o diretório Documentos local (meu notebook, onde executo este comando).

Os quatro parâmetros que usei são apenas um pequeno conjunto do arsenal do Unison.

  • -ui text – para rodar em modo texto (sim, o Unison tem uma interface gráfica)
  • -auto – aceitar todas as ações desde que não sejam conflitantes como por exemplo substituir um arquivo que foi alterado em ambos os lados e não foi possível determinar qual é o mais recente
  • -batch – responde “não” as perguntas potencialmente perigosas
  • -ignorearchives – Ignora arquivos já existentes em ambos os lados (bom quando se executa o primeiro sync, nas próximas execuções ele costuma ser desnecessário.

Alternativamente eu posso criar um perfil com esta configuração já pronta o que vai simplificar a execução do comando ficando assim:

$ unison pc-note

Obviamente para isso eu devo antes ter criado o tal perfil, o que pode ser feito simplesmente criando um arquivo com nome “pc-note.prf” (atente para o nome do arquivo – que será o nome do perfil – e para a necessidade da extensão “.prf”), dentro da pasta .unison existente no seu home (se não existir você poderá criá-la).

Usando um editor de textos qualquer bastaria então criar o arquivo como segue:

ui = text
auto = true
batch = true
ignorearchives = true
root = ssh://192.168.0.2/Documentos 
root = Documentos

Basicamente é isso. A maioria dos parâmetros são lógicos (true ou false) , ou então recebem uma string. No caso de dúvidas a dica é carregar o perfil pelo modo gráfico (remova o parâmetro “ui”) que na tela de escolha de perfis haverá um botão para editar e dali você pode configurar facilmente o seu perfil.

Para iniciar em modo gráfico basta chamar o unison a partir de uma máquina com ambiente gráfico e sem o parâmetro “-ui text”

O uso do Unison é bem simples e escolher as opções é uma questão individual para cada necessidade então não vou me delongar com muitas opções, mas duas delas que acho interessante destacar são as opções “ignore” e “path”.

Observe o perfil abaixo.

ui = text
auto = true
batch = true
ignorearchives = true
root = ssh://192.168.0.2/
root = /home/welrbraga
path = Documentos
path = Imagens
path = Projects
ignore = Name *~
ignore = Name *.tmp

Acredito que seja intuitivo, mas para deixar claro, mas desta vez estou copiando não só a pasta Documentos, mas também as pastas Imagens e Projects, mas ignorando todo arquivo cujo nome termine com um ~ ou com a extensão “.tmp”.

Por fim, a ajuda para complementar seus testes e desenvolver melhor os seus perfis de cópia use os comandos além do manual do sistema:

$ unison -doc topics
$ unison -doc tutorial
$ unison -doc basics
$ unison -doc running

E é isso. Boas cópias! 😉

2 comentários em “Sincronizando arquivos em duas vias com Unison”

    1. Opa,

      Não diretamente. O Unison foi pensado como ferramenta de replicação para duas coleções (isso está no manual da ferramenta), mas se você eleger uma máquina como “ponto central” será possível sincronizar entre elas.

      Em termos práticos, pra eu manter minha pasta imagens sincronizada entre meu PC e dois notebooks, eu possuo dois perfis:
      pc-note1 (que replica entre o PC e o Notebook1)
      pc-note2 (que replica entre o PC e o Notebook2)

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

This site uses Akismet to reduce spam. Learn how your comment data is processed.