Comando rsync no Linux (copia arquivos remotos) [Guia Básico]

O comando rsync no Linux é uma ferramenta muito versátil para cópia de arquivos remotos que oferece muitas opções que flexibilizam a forma de copiar arquivos entre computadores remotos. Com destaque, ele oferece a cópia de arquivos remotos usando o protocolo SSH, e permite a sincronização de arquivos, comparando origem e destino.

Seu uso mais comum é a capacidade de copiar somente os arquivos diferentes entre a origem e o destino. Desta forma o rsync é amplamente utilizado para backups e espelhamento de arquivos.

Existem duas maneiras do rsync transferir arquivos: usar um programa de shell remoto, como ssh ou rsh, ou através do serviço rsync, diretamente via TCP.

Exemplos:

Para copiar apenas os arquivos com extensão pdf que não existem, ou que são diferentes, para o servidor.com no diretório /home/uira. A opção “-t” preserva a hora de modificação dos arquivos:

$ rsync -t *.pdf servidor.com:/home/uira

Para copiar todos os arquivos do servidor.com do diretório /home/www de forma recursiva para o diretório local /data/www, copiando as permissões, links simbólicos, atributos e propriedade dos arquivos:

$ rsync -avz foo:/home/www /data/www

Com a opção “-a” o rsync faz cópia de backup de todos os arquivos e subdiretórios, recursivamente, preservando vários atributos dos arquivos, tais como dono do arquivo, grupo, hora de modificação, permissões e links simbólicos. A opção “-v” mostra os arquivos copiados, e a opção “-z” comprime os arquivos:

Para fazer cópias locais para discos locais com o rsync é muito simples. Funciona como o comando “cp“, mas de forma eficiente:

$ rsync -avh * /backup

A opção “-h” mostra os números de forma mais humana.

O rsync também permite cópias de arquivos remotamente com muita facilidade. É preciso que ele esteja instalado na máquina local e na máquina remota, que precisa estar executando o OpenSSH.

$ rsync -avP -e ssh -z * [email protected]:~/backup

A opção “-P” faz com que o rsync possa controlar transferências parciais, caso a conexão caia. Desta forma, se a conexão for encerrada, ao executar novamente o comando, ele recomeça de onde parou.

A opção “-e ssh” faz com que o rsync utilize o ssh como protocolo de transferência, criando um túnel criptografado.

A opção “-z” emprega o uso da biblioteca zlib para comprimir os dados antes de enviar. Isso pode ser útil em conexões lentas. Mas não é necessário se os arquivos já estiverem compactados.

Para copiar uma estrutura de diretórios, sem copiar os arquivos, pode-se usar a opção “-f“:

$ rsync -av -f"+ */" -f"- *" /home/uiraribeiro [email protected]:/home/uiraribeiro

Este tipo de cópia pode ser útil para criar uma estrutura de diretórios para iniciar um novo projeto, por exemplo.

Para apagar os arquivos no destino que não estiverem presentes na fonte, deve-se usar a opção “–delete“:

$ rsync -avz --delete /home/uiraribeiro  [email protected]:/home/uiraribeiro

Para filtrar as transferências de arquivos por tamanho de arquivo, pode-se usar a opção “–max-size“:

$ rsync -avz --max-size='5M' /home/uiraribeiro [email protected]:/tmp

Para não copiar arquivos alterados no destino, que são diferentes da versão da origem, utiliza-se a opção “-u“. Pode ser útil para não copiar arquivos de configuração de ambiente (ex: arquivos de config) de desenvolvimento para produção:

$ rsync -avzu /home/uiraribeiro/www  [email protected]:/var/www/html

Para remover o arquivo da origem, depois de copiado, usa-se o “–remove-source-files“. É útil quando se faz um ZIP ou TAR.GZ dos arquivos, especificamente para fins de copiar para algum lugar, e que pode ser apagado imediatamente após a cópia:

$ rsync --remove-source-files -zvh /home/uiraribeiro/site.tar.gz  [email protected]:/var/www/

Para incluir e excluir arquivos da lista de itens a ser copiado, pode-se usar as opções –include e –exclude:

$ rsync -avz  --include '*.pdf *.doc *.xls' --exclude '*.png *_pt.jpg' /home/uiraribeiro [email protected]:~/documentos

Para comparar os arquivos da origem e destinatário, mostrando as diferenças, mas sem efetivamente fazer a cópia. A opção “-i” compara os arquivos, e a opção “–dry-run”:

$ rsync -avzi --dry-run /home/uiraribeiro/www [email protected]:/var/www/
building file list ... done
created directory /Volumes/TCUira/Documento
>f+++++++ 37 habitos.pdf
>f+++++++ A arte de fazer o dobro do trabalho na metade do tempo - Jeff Shuterland.pdf
>f+++++++ tcc/uira.png

sent 2.03M bytes  received 407.02K bytes  695.72K bytes/sec
total size is 17.89G  speedup is 7348.33

As letras da opção “-i” significam:

  • d: identifica diretório
  • f:  identifica arquivo
  • L: identifica links
  • t:  timestamp é diferente
  • s: tamanho é diferente
  • p: permissão é diferente
  • o: dono é diferente
  • g: grupo é diferente

O endereço remoto deverá conter o login do usuário (uiraribeiro), o endereço ou IP do servidor, seguido de dois-pontos “:” e o diretório no servidor remoto para aonde vão os arquivos. O usuário no servidor remoto precisa ter permissões para gravar no servidor.

Aprenda muito mais sobre Linux em nosso curso online. Você pode efetuar a matrícula aqui. Se você já tem uma conta, ou quer criar uma, basta entrar ou criar seu usuário aqui.

Gostou? Compartilhe