10 exemplos úteis do comando rsync do Linux

Publicados: 2022-10-28
Laptop Linux mostrando um prompt bash
fatmawati achmad zaenuri/Shutterstock.com

O comando rsync do Linux é uma poderosa ferramenta de cópia de arquivos e sincronização de pastas. Aqui estão dez casos de uso comuns que você poderá usar bem em seus próprios sistemas.

Índice

A ferramenta rsync

A ferramenta rsync copia arquivos e diretórios entre dois computadores. Ele usa um algoritmo sofisticado que verifica as árvores de diretórios para localizar arquivos no computador de origem que não existem no computador de destino. Esses arquivos são transmitidos para o computador de destino. O que torna o rync tão inteligente é que ele pode descobrir quais partes dos arquivos existentes foram modificadas e envia apenas as partes alteradas .

Você pode usar o rsync para copiar arquivos para um local diferente no disco rígido, para um disco rígido diferente no mesmo computador, para uma unidade USB conectada externamente ou qualquer outro local acessível pela rede.

Como fazer backup do seu sistema Linux com rsync
RELACIONADO Como fazer backup do seu sistema Linux com rsync

Além disso, o rsync pode opcionalmente preservar links simbólicos, links físicos e metadados de arquivos, como propriedade de arquivos, permissões e tempos de acesso. Para suportar toda essa funcionalidade, o rsync tem muitas opções e descobrir todas elas leva tempo. Reunimos estes 10 exemplos para ajudar você a começar. Já escrevemos sobre fazer backups com rsync , então estamos nos concentrando em outros usos aqui.

Para todas as suas muitas opções, a estrutura de um comando rsync é simples. Precisamos fornecer a origem, o destino e as opções que queremos usar. Você provavelmente descobrirá que o rsync já está instalado em seu computador Linux – estava, em todas as nossas máquinas de teste – mas se não estiver, definitivamente estará nos repositórios de sua distribuição.

1. Copie os arquivos para um diretório diferente

Aqui está um exemplo simples para nos ajudar. Vamos copiar os arquivos do diretório “project-files” para o diretório “Documents”. Estamos usando duas opções, a opção -a (arquivo) e a opção -v (verbose). A opção detalhada diz ao rsync para explicar o que está fazendo enquanto o faz. A opção de archive preserva a propriedade do arquivo e alguns outros itens que veremos em breve.

O formato do comando é options source-location destination-location .

 rsync -av /home/dave/project-files/ /home/dave/Documents/ 

Copiando arquivos para diretório diferente no mesmo computador com rsync

Usar ls na pasta “Documents” mostra que os arquivos foram copiados.

Listando os arquivos no diretório de documentos

Enquanto o rsync está funcionando, os arquivos são listados à medida que são copiados. Nos é dito:

  • O número de bytes que são enviados.
  • O número de bytes recebidos. Antes que a transferência do arquivo ocorra, o rsync precisa descobrir quais arquivos precisam ser transferidos. Para isso, algumas informações sobre os arquivos no destino devem ser recuperadas pelo rsync . Esta informação está contida nos bytes recebidos.
  • A velocidade da transferência.
  • O tamanho total dos arquivos copiados.
  • A “aceleração”. Esta é a proporção do tamanho total dividido pela soma dos bytes enviados e recebidos. Quanto maior esse número, mais eficiente será a transferência.

Modificamos o arquivo de texto no diretório de origem e repetimos o comando rsync .

 rsync -av /home/dave/project-files/ /home/dave/Documents/ 

Copiando arquivos para diretório diferente no mesmo computador com rsync

Desta vez, o único arquivo que precisa ser atualizado é o arquivo de texto que modificamos. O número de aceleração agora é de 30.850. É muito mais eficiente copiar a parte modificada desse único arquivo do que copiar todos os arquivos.

A opção -a (arquivo) na verdade representa uma coleção de outras opções. É o mesmo que usar todas essas opções:

  • r : Trabalhe recursivamente através de árvores de diretórios no diretório de origem e copie-as para o diretório de destino, criando-as se ainda não existirem lá.
  • l : Copia links simbólicos como links simbólicos.
  • p : Preserva as permissões do arquivo.
  • t : Preserva os tempos de modificação do arquivo.
  • g : Preserva as permissões do grupo.
  • o : Preserva a propriedade do arquivo.
  • D : Copia arquivos especiais e arquivos do dispositivo. Arquivos especiais podem ser itens centrados em comunicação que são tratados como arquivos, como soquetes e pipes first-in, first-out (fifos). Arquivos de dispositivo são arquivos especiais que fornecem acesso a dispositivos e pseudodispositivos.

Essa é uma combinação usada com tanta frequência que o rsync fornece a opção -a (arquivo) como uma forma abreviada de invocar todas elas.

2. Copie um diretório para um diretório diferente

Se você observar o comando rsync anterior, verá uma barra à direita “/” no caminho do arquivo do diretório de origem. Isso é significativo. Ele diz ao rsync para copiar o conteúdo do diretório. Se você não fornecer a barra à direita, o rsync copiará o diretório e seu conteúdo.

 rsync -av /home/dave/project-files /home/dave/Documents/ 

Copiando o diretório e seu conteúdo para um diretório diferente no mesmo computador com rsync

Desta vez, o nome do diretório é adicionado ao nome do arquivo conforme são listados. Se olharmos dentro do diretório de destino, veremos que a pasta de origem foi copiada com os arquivos dentro dela.

 ls Documentos/
 ls Documents/project-files/ 

Listando os arquivos copiados no diretório transferido

3. Copie um diretório para uma unidade diferente

Copiar arquivos para outro local no mesmo disco rígido não oferece proteção contra falhas na unidade. Se essa unidade desistir do fantasma, você perdeu as cópias de origem e destino desses arquivos. Copiá-los para outro disco rígido é uma maneira muito mais robusta de proteger seus dados. Tudo o que precisamos fazer é fornecer o caminho correto para a unidade de destino.

 rsync -av /home/dave/project-files /run/mount/drive2 

Copiando arquivos para um disco rígido diferente no mesmo computador

Olhando para o outro disco rígido nos mostra o diretório e os arquivos foram copiados para ele.

 ls run/mount/drive2/project-files/ 

Listando os arquivos que foram copiados para outro disco rígido no mesmo computador

RELACIONADO: O que fazer quando seu disco rígido falha

4. Fazendo um Dry Run primeiro

Antes de vermos como o rsync pode excluir arquivos de maneira útil para nós, vamos ver como podemos fazer o rsync executar uma simulação.

Em uma simulação, o rsync executa os movimentos de execução das ações que pedimos, mas na verdade não as executa. Ele relata o que teria acontecido se o comando tivesse sido executado. Dessa forma, podemos garantir que o comando faça exatamente o que esperamos.

Para forçar uma simulação, usamos a opção --dry-run .

 rsync -av --dry-run /home/dave/geocoder /run/mount/drive2 

Executando uma simulação de um comando rsync

Os arquivos que teriam sido copiados são listados para nós, e obtemos as estatísticas usuais, seguidas da mensagem (DRY RUN) para que saibamos que nada realmente aconteceu.

5. Excluindo arquivos no diretório de destino

A opção --delete diz ao rsync para excluir arquivos e diretórios no diretório de destino que não estão no diretório de origem. Isso significa que o diretório de destino será uma cópia exata do diretório de origem. Seremos prudentes e usaremos a opção --dry-run primeiro.

 rsync -av --delete --dry-run /home/dave/geocoder /run/mount/drive2 

Executando uma simulação de um comando rsync que pode excluir arquivos

Fomos informados de que dois arquivos serão excluídos. Se tivermos certeza de que não nos importamos que eles sejam excluídos, podemos remover a opção --dry-run e executar o comando de verdade.

 rsync -av --delete /home/dave/geocoder /run/mount/drive2 

Copiando arquivos e removendo arquivos do diretório de destino que não estão no diretório de origem

Desta vez, o conteúdo dos diretórios é sincronizado e os dois arquivos extras são excluídos.

6. Excluindo os arquivos de origem

Você pode optar por excluir os arquivos de origem após uma transferência bem-sucedida , fazendo com que o rsync funcione mais como um movimento do que como uma cópia. Se a transferência não for bem-sucedida, os arquivos de origem não serão excluídos. A opção que precisamos usar é --remove-source-files .

 rsync -av --remove-source-files /home/dave/geocoder /run/mount/drive2 

Forçando o rsync a excluir os arquivos de origem após uma transferência bem-sucedida

Observe que os arquivos podem ser excluídos mesmo que nenhum arquivo seja transferido. Isso porque se o rsync verificar e todos os arquivos já estiverem no diretório de destino e não houver nada para o rsync fazer, o rsync considerará uma transferência bem-sucedida.

Além disso, o rsync exclui apenas os arquivos do diretório de origem. Ele não exclui o diretório de origem nem nenhum subdiretório, apenas os arquivos neles. Podemos ver isso usando a opção -R (recursiva) com ls , no diretório de origem.

 ls -R geocodificador 

Uma árvore de diretórios vazia depois que o rsync excluiu os arquivos de origem

7. Copie arquivos para um computador remoto

Para sincronizar pastas com um computador remoto, o rsync deve ser instalado em ambos os computadores. Configure a comunicação SSH entre os dois computadores antes de tentar usar o rsync no computador remoto.

Como criar e instalar chaves SSH do shell do Linux
RELACIONADO Como criar e instalar chaves SSH do shell do Linux

Você precisa ser capaz de efetuar login remotamente como um usuário comum no computador remoto para que o rsync funcione. Não importa se você usa um ID e senha para fazer login ou se você configurou chaves SSH para acesso seguro sem senha, mas se você não puder fazer login como usuário, o rsync não funcionará qualquer.

Se você fizer login com uma senha, o rsync solicitará a senha. Se você usar chaves SSH para fazer login, o processo será contínuo.

A única coisa extra que você precisa fazer é adicionar o nome da conta de usuário e o endereço IP do computador remoto ao início do caminho do arquivo de destino. Use uma arroba “ @ ” para separar o nome de usuário do nome do computador ou endereço IP e dois pontos “ : ” para separar o nome do computador ou endereço IP do caminho do diretório.

Em nossa rede de teste, esses dois comandos são equivalentes.

 rsync -av /home/dave/geocoder [email protected]:/home/dave/Downloads
 rsync -av /home/dave/geocoder [email protected]:/home/dave/Downloads 

Copiando arquivos para um computador remoto por SSH com rsync

Recebemos as mesmas informações que recebemos quando copiamos arquivos localmente.

8. Incluir ou Excluir Arquivos ou Diretórios

Você pode ter arquivos e diretórios no diretório de origem que não deseja copiar para o computador de destino. Você pode excluí-los usando a opção --exclude . De maneira semelhante, você pode optar por incluir arquivos e diretórios específicos com a opção --include .

A peculiaridade é que se você usar a opção --include por conta própria, todos os arquivos serão copiados, normalmente—incluindo seus arquivos especificamente incluídos. Para copiar apenas os arquivos incluídos, você deve --exclude todo o resto.

Você pode usar quantas opções --include e --exclude em seu comando quiser, mas certifique-se de colocar suas opções --include antes de suas opções --exclude . Além disso, certifique-se de ter uma barra à direita no caminho do arquivo de origem.

Este comando copia apenas arquivos de código-fonte C e arquivos de dados CSV para o computador de destino.

 rsync -av --include="*.c" --include="*.csv" --exclude="*" /home/dave/geocoder/ /run/mount/drive2/geocoder

Usando rsync para copiar arquivos selecionados para um disco rígido diferente no mesmo computador

Os únicos arquivos copiados são os que incluímos especificamente.

9. Compactar arquivos em transferência

A opção -z (comprimir) faz com que o rsync comprima os arquivos transferidos. Eles não são armazenados como arquivos compactados no computador de destino, mas são compactados apenas durante a própria transferência. Isso pode acelerar transferências demoradas.

 rsync -avz /home/dave/geocoder /run/mount/drive2 

Compactando arquivos conforme eles são transferidos com a opção -z rsync

10. Monitorando o Progresso

Falando em transferências demoradas, podemos adicionar algumas estatísticas para que possamos ver o andamento da transferência.

A opção -P (partial, progress) na verdade adiciona duas opções, --partial e --progress . A opção --partial diz ao rsync para manter os arquivos parcialmente transferidos se uma transferência falhar. Isso economiza tempo quando a transferência é reiniciada.

A opção --progress imprime, para cada arquivo, os dados transferidos em bytes e em porcentagem, a velocidade da transferência, o tempo gasto, o número do arquivo que está sendo transferido e a contagem dos arquivos restantes.

 rsync -aP /home/dave/geocoder /run/mount/drive2 

Usando a opção -P para fornecer estatísticas para a transmissão de cada arquivo

A saída rola rapidamente e é difícil de ler. Você pode melhorar um pouco as coisas removendo a opção -v (verbose) do comando. Mesmo assim, ainda é difícil de ler à medida que passa zunindo.

Estatísticas de transferência para cada arquivo transferido

Muitas vezes, é mais útil monitorar o progresso da transferência geral. Você pode fazer isso com a opção –info e passando “progress2” como parâmetro.

 sync -a --info=progress2 /home/dave/geocoder /run/mount/drive2 

Estatísticas para a transferência geral de rsync

Isso fornece um relatório de progresso que é realmente útil.

Como cp em esteróides

O comando rsync é rápido, flexível e vale o tempo necessário para se familiarizar com ele. A forma básica de um comando rsync com as opções -av , diretório de origem e diretório de destino não é difícil de lembrar.

Para muitos casos de uso, isso é tudo que você precisa. Fique confortável com isso e o resto virá facilmente.

RELACIONADO: O guia para não iniciantes para sincronizar dados com o Rsync