Como Dominar o Comando rsync no Linux

Como o próprio nome sugere, rsync é uma ferramenta de sincronização. Na primeira vez que você a usa, ela simplesmente copia arquivos e diretórios de um local para outro. No entanto, nas utilizações subsequentes, ela sincroniza apenas as diferenças entre esses locais. Assim, se você adicionar um arquivo ao diretório de origem, o rsync copiará apenas o novo arquivo para o destino. Isso economiza bastante tempo e largura de banda, especialmente ao copiar para um local remoto.
Imagine que você tem 50GB de dados que precisa sincronizar com um servidor remoto. Você pode agendar o rsync para executar diariamente. Em vez de ter que copiar os 50GB todo dia, a ferramenta enviará apenas as diferenças. Isso pode significar que ela precisará enviar apenas alguns megabytes de dados todos os dias, em vez de gigabytes.
Na imagem em destaque acima, você pode ver como na primeira vez foram transferidos 104MB, enquanto na segunda utilização apenas 31KB foram necessários.
Leia também: Usando Rclone para Sincronizar com Vários Provedores de Armazenamento em Nuvem no Linux
Como Instalar o rsync em Várias Distribuições Linux
No Debian e em distribuições baseadas no Debian, como Ubuntu, você pode instalar o rsync com:
sudo apt install rsync
No Fedora, instale com:
dnf install rsyncE em distribuições derivadas do RedHat (por exemplo, CentOS):
yum install rsyncPara instalar o rsync no Arch Linux, use o comando:
pacman -S rsyncNo openSUSE, use:
zypper install rsyncSe não estiver incluído nos seus repositórios padrão, consulte a página de instalação do rsync do openSUSE.
Como Usar o rsync para Sincronizar Arquivos ou Diretórios Locais
A sintaxe geral do rsync é: rsync [opções] /caminho/para/origem /caminho/para/destino.
[opções] representa opções de linha de comando que você pode encontrar no manual:
man rsync
Pressione q para sair do manual.
Para copiar um arquivo:
rsync /bin/ls .O comando acima é equivalente a rsync /bin/ls /home/seu_nome_de_usuário. Isso copia o comando “ls” para o diretório em que você está atualmente. Por padrão, isso deve ser /home/seu_nome_de_usuário. O ponto . representa o diretório atual. Os caminhos podem ser absolutos ( /home/seu_nome_de_usuário/Downloads/chrome.zip) ou relativos ao seu diretório atual ( Downloads/chrome.zip).
Quando você lida com arquivos muito grandes, pode usar este comando:
rsync -P /caminho/para/arquivo /caminho/para/destinoIsso mostrará o progresso e permitirá que você retome uma transferência interrompida. Caso precise retomar, use:
rsync -P --append /caminho/para/arquivo /caminho/para/destinoSem --append, a transferência começaria do zero.
Para sincronizar diretórios:
rsync -av /caminho/para/origem /caminho/para/destinoExemplo de comando:
rsync -av /bin .Efeito da Barra Final no rsync (Importante)
No comando anterior, note que o caminho para o diretório de origem não contém uma barra final / ( /bin vs /bin/). Sem uma barra final, o rsync copia o próprio diretório. Portanto, rsync -av /bin . resulta no que é mostrado na imagem a seguir.

Quando uma barra final é usada, o rsync copia o conteúdo daquele diretório. Nesse caso, cada arquivo em /bin seria espalhado pelo diretório de destino. Portanto, rsync -av /bin/ . resultaria no que é mostrado na imagem a seguir.

É muito importante lembrar essa diferença, pois usar TAB para autocompletar nomes de diretórios adiciona automaticamente uma barra final no final. Portanto, tenha isso em mente para evitar criar uma bagunça no diretório de destino.
Como Usar o rsync para Sincronizar com Locais Remotos (por exemplo, Servidores)
O que foi descrito na seção anterior também se aplica ao trabalhar com locais remotos. A única diferença é que você deve preceder o nome de usuário de login e o endereço do local remoto. Para enviar seu diretório /bin para um computador remoto, use:
rsync -av /bin seu_nome_de_usuá[email protected]:/home/seu_nome_de_usuáriorsync conecta através do OpenSSH. Isso significa que você precisa configurar o servidor OpenSSH e as credenciais de login no destino remoto com antecedência. Note que seu_nome_de_usuário refere-se ao nome de usuário criado no servidor. Isso pode ser diferente do nome de usuário que você tem em sua máquina local.
Se você possui um nome de domínio e aponta para o IP do seu servidor, pode usar o domínio no comando:
rsync -av /bin seu_nome_de_usuá[email protected]:/home/seu_nome_de_usuárioEm transferências grandes, é útil também comprimir dados antes de enviá-los, adicionando o parâmetro -z:
rsync -avz /bin seu_nome_de_usuá[email protected]:/home/seu_nome_de_usuárioVocê pode omitir o parâmetro de compressão quando enviar arquivos que já estão comprimidos (arquivos de áudio como MP3, vídeos, imagens JPEG). Eles não podem ser comprimidos ainda mais, então você realmente perderia tempo usando -z nesses.
Para copiar arquivos do destino remoto para seu computador local, basta inverter os locais:
rsync -avz seu_nome_de_usuá[email protected]:/bin /home/seu_nome_de_usuárioConclusão
Isso cobre os comandos mais importantes do rsync que você precisa saber. Se você precisar de mais controle sobre como sincronizar diretórios, consulte o manual online do rsync e role algumas páginas para baixo até encontrar “Resumo das Opções.”