rsync é um utilitário amplamente usado para manter cópias de um arquivo em dois sistemas de computadores ao mesmo tempo.
É normalmente encontrado em sistemas do tipo Unix e em funções como um programa de sincronização de arquivos e transferência de arquivos. O algoritmo rsync, um tipo de codificação delta, é usado para minimizar o uso da rede.
Zlib pode ser usado para compressão adicional e o SSH ou stunnel pode ser usado para segurança de dados.
Rsync está em código aberto sob os termos da GNU GPL Versão 2.
Para instalar o Rsync na sua Distro, exemplos:
emerge rsync # Gentoo, Funtoo, ...
sudo apt install rsync # Debian, Ubuntu, Mint, ...
sudo pacman -S rsync # Arch, Manjaro, ...
sudo dnf install rsync # Red Hat, Fedora, ...
Agora vamos aos exemplos!
Similar ao comando cp
rsync ~/Downloads/arquivo.txt .
Ou seja, exiindo detalhes da operação
rsync -v Downloads/arquivo.txt .
cheat_sheet_sed.pdf
sent 471,766 bytes received 35 bytes 943,602.00 bytes/sec
total size is 471,560 speedup is 1.00
O parâmetro é -r
ou --recursive
, mas agora é bom usar todos os comandos com -v
rsync -rv Downloads/my-dir/ .
O problema do exemplo 03 é que o diretório my-dir
não será criado e os arquivos ficarão espalhados.
O correto é usar ele criando o diretório:
rsync -rv Downloads/my-dir/ --mkpath my-dir
A saída exemplo:
sending incremental file list
created 1 directory for my-dir
arquivo-01.txt.jpg
arquivo-02.txt.jpg
arquivo-03.txt.jpg
arquivo-04.txt.jpg
arquivo-05.txt.jpg
arquivo-06.txt.jpg
arquivo-07.txt.jpg
arquivo-08.txt.jpg
arquivo-09.txt.jpg
arquivo-10.txt.jpg
arquivo-11.txt.jpg
arquivo-12.txt.jpg
sent 630,589 bytes received 286 bytes 1,261,750.00 bytes/sec
total size is 629,625 speedup is 1.00
Essa é estilo total scp
rsync 192.168.189.36:~/arquivo-remoto.txt .
Ou especificando seu usuário e ainda também, verbose:
rsync -v user@192.168.189.36:~/arquivo-remoto.txt .
Assim como no scp
precisa usar o -r
, para esse caso remoto não precisa do --mkpath
, os diretórios serão criados automaticamente.
rsync -rv user@192.168.189.36:~/my-dir .
Exemplo de saída:
user@192.168.189.36's password:
receiving incremental file list
my-dir/
my-dir/arquivo-01.txt
my-dir/arquivo-02.txt
my-dir/arquivo-03.txt
my-dir/arquivo-04.txt
my-dir/subdir/
my-dir/subdir/outro-arquivo.txt
sent 135 bytes received 501 bytes 84.80 bytes/sec
total size is 45 speedup is 0.07
A gente sabe que pode usar o *
para copiar estilo glob, que não é regex. Então para copiar só os arquivos txt do diretório raiz remoto.
Lembrando que o diretório não será criado.
rsync -rv user@192.168.189.36:~/my-dir/*.txt .
Diferentemente do scp
, se você cancelar a cópia o arquivo local deixará de existir, ou seja, ele não copia pedaços, é sempre de forma síncrona.
rsync -rv --progress user@192.168.189.36:~/distro.iso .
Cópia remota dentro da rede também consomem largura da banda baseada na velocidade da sua placa de rede, então para que você continue usando a rede ou a internet sem deixá-la lenta às vezes é interessante limitar a velocidade da cópia, para isso você pode usar o parametro --bwlimit=[número]
, onde o [número] será em kilobits .
rsync -rv --bwlimit=64 --progress user@192.168.189.36:~/*.vdi .
A velocidade não ficará com exatos 64k, mas ficará em torno, um pouco acima ou abaixo, exemplo:
user@192.168.189.36's password:
receiving incremental file list
distro.iso
425,984 0% 64.81kB/s 17:04:05
E por fim, nos resta o manual e ajuda, pois lá ainda tem parâmetro pra caramba!
man rsync
rsync --help