Copie arquivos entre dispositivos, com a máxima segurança, usando o grsync

O Grsync é uma interface gráfica para o programa de cópias rsync, desenvolvida em GTK2.
Até o momento, suporta os recursos mais importantes do rsync da linha de comando e é indicado para realizar sincronização de diretórios locais.

Pode ser chamado da interface gráfica, como qualquer outro programa e tem versões para Windows, Mac e Linux.

Se preferir executar da linha de comando (CLI), é possível especificar uma determinada sessão a ser carregada, em vez da sessão padrão.
Se nenhum parâmetro for dado, na CLI, ele carrega a última tarefa realizada, o que facilita a vida de quem sempre usa o rsync de uma só maneira, para copiar os mesmos arquivos para o mesmo destino.

Como instalar o Grsync

Usuários Windows e Mac, vejam os links de download ao final do post.

Para a turma do Linux, o aplicativo faz parte dos repositórios (lojas) oficiais das principais distribuições.
Debian Ubuntu Instalar programas

Será fácil encontrá-lo no seu gerenciador/instalador de programas (ou loja de apps).
Instalação do grsync

Quem prefere a linha de comando, pode usar o apt (Debian/Ubuntu):


sudo apt install grsync

Como usar o Grsync

Basicamente, tudo o que se precisa fazer é indicar a pasta/diretório de origem e o destino.
Claro que há uma série de outras opções de ajustes para as suas cópias saírem de acordo com as suas necessidades.
A interface está quase toda traduzida para o português, o que facilita fazer suas escolhas, quanto ao modo de operação do programa.
Tela do Grsync

Você pode passar o cursor do mouse sobre as alternativas do painel, para obter uma ajuda sensível ao contexto, através de uma pop up box.
O painel de opções avançadas apresenta itens de segurança de dados durante a cópia e um espaço, semelhante à linha de comando, para personalizar suas opções.

Durante a execução, o Grsync exibe o andamento das cópias individuais (no caso de vários arquivos) e no decurso total da tarefa.

Não há nada que o Grsync faça que não seja possível realizar, com mais flexibilidade e controle, na linha de comando com o rsync.
Mas é uma aplicação alternativa e excelente para quem prefere usar a GUI para transferência de arquivos.

Se quiser saber mais sobre o rsync, leia aqui.

Referências

Página de download da versão para Windows: http://grsync-win.sourceforge.net/
Página de download da versão para Mac: http://grsync-mac.tuxfamily.org/?lang=en

Como copiar arquivos na linha de comando com exibição do progresso

É possível exibir o progresso da transferência dos dados, à medida em que são copiados no Linux/Unix com o uso do comando de cópia, cp?

A resposta curta é não.
Porém, através de um hack (que vou ensinar neste artigo), é possível fazer cópias de todos os arquivos de um diretório (recursivamente, se você quiser) para outro, com a exibição do progresso da cópia de cada arquivo.

rsync - exemplo de uso - captura de tela
Com o uso do alias, o cp se comporta como o comando rsync.

Se estivermos falando de arquivos muito grandes (áudio, vídeo etc.) será possível acompanhar melhor o processo de cópia na CLI (linha de comando).
Vamos ver como realizar o procedimento com o uso destas 2 ferramentas padrão em qualquer distro GNU/Linux: alias e rsync.
O comando rsync serve para fazer cópias entre diretórios locais e remotos.
Com ele é possível obter um retorno sobre a taxa de progresso da cópia de dados.
Por exemplo, para copiar todos os arquivos da pasta Documentos para /media/justincase/pendrive, use o comando assim:


rsync -ahu --progress Documentos/* /media/justincase/pendrive/

Veja o que o comando faz:

  • -a — estabelece que a transferência ocorra no nível de arquivo.
  • -hhuman readable, indica que o retorno deve ocorrer em Kb/Mb, para tornar a leitura mais fácil.
  • -uupdate, atualiza apenas os arquivos com entradas mais novas, para agilizar o processo. O rsync já faz a cópia incremental, por padrão — ou seja, verifica antes se os arquivos já existem no destino e só copia se houve atualizações.
  • --progress — finalmente, esta é a opção de exibição do progresso da execução da transferência individual da cópia.

Para adicionar recursividade, use a opção ‘-r’:


rsync -ahur --progress Documentos/* /media/justincase/pendrive/

Fique à vontade para alterar os itens da linha de comando, para que ela se encaixe às suas necessidades.
Por fim, altere a função do comando cp, no seu sistema, com o uso do alias:


alias cp="rsync -ahu --progress"

Se preferir que a função de recursividade fique em um comando separado, crie um novo alias:


alias cpr="rsync -ahur --progress"

Veja um exemplo de funcionamento do “novo” cp:


cp ~/Documentos/Documento\ digitalizado* /media/justincase/b655b449-21c6-42ca-b274-5adf9980a843/Documentos/

sending incremental file list
Documento digitalizado-1.jpg
        953.79K 100%   48.80MB/s    0:00:00 (xfr#1, to-chk=11/12)
Documento digitalizado-1.jpg.zip
        917.61K 100%   15.63MB/s    0:00:00 (xfr#2, to-chk=10/12)
Documento digitalizado-1.png
          7.40M 100%   43.27MB/s    0:00:00 (xfr#3, to-chk=9/12)
Documento digitalizado-2.jpg
        407.14K 100%    2.03MB/s    0:00:00 (xfr#4, to-chk=8/12)
Documento digitalizado-2.jpg.zip
        354.94K 100%    1.74MB/s    0:00:00 (xfr#5, to-chk=7/12)
Documento digitalizado-2.png
        483.23K 100%    2.06MB/s    0:00:00 (xfr#6, to-chk=6/12)
Documento digitalizado-3.jpg
        318.37K 100%    1.22MB/s    0:00:00 (xfr#7, to-chk=5/12)
Documento digitalizado-3.jpg.zip
        309.96K 100%    1.17MB/s    0:00:00 (xfr#8, to-chk=4/12)
Documento digitalizado-3.png
        482.62K 100%    1.64MB/s    0:00:00 (xfr#9, to-chk=3/12)
Documento digitalizado-pgto-helio20140513.pdf
        112.15K 100%  359.08kB/s    0:00:00 (xfr#10, to-chk=2/12)
Documento digitalizado.jpg
         30.82K 100%   96.76kB/s    0:00:00 (xfr#11, to-chk=1/12)
Documento digitalizado.png
          7.40M 100%   16.79MB/s    0:00:00 (xfr#12, to-chk=0/12)

Segue um exemplo de uma variação do uso do rsync, que inclui a opção ‘–info=progress2’:


rsync -ah --info=progress2 ~/Documentos/Documento\ digitalizado* /media/justincase/b655b449-21c6-42ca-b274-5adf9980a843/Documentos/

         19.16M 100%  192.03MB/s    0:00:00 (xfr#12, to-chk=0/12)

Neste caso, os dados sobre o progresso se referem à tarefa toda e não apenas a cada arquivo individualmente.
Você pode criar um alias para este modo de operação, se quiser.

Copie arquivos com o rsync

Vou mostrar, com alguns exemplos práticos, como o uso do rsync pode ajudar a manter o conteúdo de 2 diretórios (pastas) separados sincronizado – mesmo que estejam em computadores diferentes.
Comando rsync copia arquivos
O comando rsync faz transferências de arquivos entre máquinas, de maneira simplificada e automática e… você nem precisa ter privilégios administrativos para isto.

Alguns dos recursos do Rsync

  • é eficiente para copiar e sincronizar arquivos entre computadores remotos
  • comparado com outros programas, é mais rápido do que o scp – o rsync usa um protocolo que lhe permite atualizar apenas os arquivos que sofreram mudanças
  • consome menos banda, uma vez que só trabalha em cima das atualizações necessárias e usa compressão para transferir dados

Instalação do rsync

Até onde sei, o comando vem instalado por padrão nas várias distro Linux.
Usuários Windows podem fazer o download do rsync aqui.
Usuários do Redhat ou do SuSE, podem instalar o rsync com o seguinte comando:

sudo yum install rsync

Usuários Debian e Ubuntu, podem usar o apt-get:

sudo apt-get install rsync

Sintaxe do comando rsync

Basicamente, você vai rodar o rsync com algumas opções, indicar a origem e o destino da sincronização:

rsync options #origem #destino

Daqui pra frente veremos outros exemplos práticos com o comando rsync.

Como sincronizar dois diretórios locais com o rsync

Vamos usar estes dois como exemplo:

  • /home/Documentos, como origem e
  • /home/backup/Documentos, como destino.

Vou mostrar como copiar a sincronizar recursivamente os diretórios:

rsync -vhr /home/Documentos /home/backup

o comando vai criar, se não houver, uma pasta chamada /home/backup/Documentos e copiar para dentro dela todo o conteúdo da outra pasta. Ao final do processo deverá retornar um relatório semelhante a este:

sent 707.32M bytes  received 2.35K bytes  2.92M bytes/sec
total size is 827.60M  speedup is 1.17

Ao repetir o comando, o rsync irá comparar os arquivos em busca de diferenças, por que ele só irá atualizar os arquivos que foram modificados.

OPÇÕES COMUNS DO RSYNC
  • -v — ativa a verbosidade do comando, pra você poder acompanhar o que está acontecendo durante sua execução;
  • -r — ativa a recursividade, ou seja, copia subdiretórios também;
  • -h — human readable exibe as informações da execução do comando em um formato mais legível, convertendo valores de bytes para mega ou gigabytes onde for necessário para reduzir os tamanhos dos números e tornar o texto mais fácil de ler;
  • -z — comprime os dados, antes de transferir;
  • -a — liga o modo archive que permite a cópia recursiva de arquivos, preservando links simbólicos, permissões de arquivos e timestamps.

Como copiar e sincronizar um arquivo local via rsync

Neste exemplo, vamos sincronizar um único arquivo, em um computador local, entre dois diretórios diferentes:

rsync -zvh Docs/mysql_storage.html /backup/Docs/mysql_storage.html

obtendo como resultado:

mysql_storage.html
sent 1.68K bytes  received 31 bytes  3.43K bytes/sec
total size is 3.38K  speedup is 1.97

Como sincronizar um diretório local com um remoto via SSH

Chegamos a um dos pontos fortes do rsync.
No exemplo que segue, vou copiar os arquivos do diretório /home, no servidor remoto remoto.com.br para um diretório local /backup. O nome de usuário, no exemplo, é justincase:

rsync -avz -e ssh justincase@remoto.com.br:/home /backup

Faça o teste com os seus próprios valores e veja se funciona.