• mail@brunobrito.pt

Como sincronizar 2 pastas em macOS com o Rsync

Como sincronizar 2 pastas em macOS com o Rsync

Como sincronizar 2 pastas em macOS com o Rsync

Como sincronizar 2 pastas em macOS com o Rsync 1240 700 Bruno Brito

Como tantos outros, tenho o hábito de manter algumas pastas do meu macOS sincronizadas com um disco externo, para efeitos de backup.

Depois de vários anos a fazer o habitual drag and drop, decidi ir à procura de uma alternativa melhor… e ainda bem que o fiz!

Procurava uma aplicação que preenchesse os seguintes requisitos:

  • verificar se existem ficheiros em falta na diretoria de destino (e transferi-los);
  • verificar se existiram alterações nos ficheiros da diretoria de origem (e, se sim, atualizar esses mesmos ficheiros na diretoria de destino);
  • apagar eventuais ficheiros que já não existissem na pasta de origem (requisito bónus, visto ser uma necessidade rara no meu caso).

A solução, curiosamente, já estava instalada no meu macOS desde que o comprei. Falo do Rsync.

O Rsync é uma ferramenta para o terminal que já deverá estar instalada no teu macOS. Podes ver a versão que tens instalada escrevendo rsync --version.

Rsync no iTerm

O mais provável é que a tua versão esteja desatualizada – a Apple deixou de incluir ferramentas com a licença GPLv3 ou similar, como é o caso desta. No entanto, atualizá-la é um processo simples.

Para o fazer, vais precisar do Homebrew, que menciono em maior detalhe neste artigo, visto ser uma solução fantástica para automatizar a instalação de aplicações.

Para atualizares o Rsync (eu ainda tinha a versão 2), bastará correres o comando brew install rsync.

Agora sim, está na hora de ficares a conhecer os comandos mais populares desta poderosa ferramenta de sincronização de pastas e ficheiros.

Explorando o Rsync

Imaginando um cenário em que tens a dir1 (que é a diretoria de origem) e a dir2 (a diretoria de destino), bastará correres o seguinte comando:

rsync dir1/ dir2

Aquela / é importante que utilizes. Se só escreveres rsync dir1 dir2, ficarás com uma estrutura do tipo dir2/dir1/ficheiro em vez de dir2/ficheiro. Na maior parte das situações, não é o que se pretende.

Se quiseres que as subdiretorias dentro de dir1 também sejam sincronizadas, podes acrescentar a flag -r, mas a opção mais popular é a flag -a, que também preserva as permissões, o grupo, data de modificação e outras informações. Opto praticamente sempre pela segunda.

Podes também acrescentar -v se quiseres um relatório do que foi transferido, e -P para que tenhas uma barra de progresso para as transferências e a possibilidade de continuar transferências interrompidas.

Juntando as peças, ficarias com este comando, que diria que é o mais popular:

rsync -avP dir1/ dir2

Para testares o comando sem transferir realmente os ficheiros (a chamada dry run), podes acrescentar -n.

Este comando é particularmente importante se quiseres acrescentar --delete, que é o comando que apaga ficheiros na diretoria de destino, se os mesmos já não existirem na diretoria de origem.

Se tiveres essa necessidade, aconselho-te a simular sempre primeiro o comando, visto que existem inúmeras histórias de terror de malta que perdeu dados importantes desta forma!

Corre algo deste género primeiro:

rsync -avn --delete dir1/ dir2

E se estiver tudo OK no relatório, retira o n e volta a corrê-lo.

Não te esqueças também que podes utilizar o Rsync entrando numa máquina remota via SSHrsync -a ~/dir1 username@host:diretorio – ou aceder a um disco externo.

No meu caso, visto que o meu disco se chama “Elements”, escreveria algo deste género:

rsync -av dir1/ /Volumes/Elements/dir2"

Estes são os comandos mais populares, mas podes sempre consultar o manual para casos mais específicos.

Para mais comandos no terminal, passa os olhos por este artigo!

    Se quiser entrar em contacto comigo, pode enviar-me um e-mail para mail@brunobrito.pt ou preencher o formulário abaixo.

    NOTA: Todos os campos são de preenchimento obrigatório.


      Como sincronizar 2 pastas em macOS com o Rsync

      Tempo de Leitura: 3min
      0