>_ josetilabs.com
← blog

02 nov 2026 · infraestrutura, linux · 4 min

Copiar, sincronizar e retomar transferências com rsync

rsync não copia arquivo por arquivo do zero: ele compara origem e destino e transfere só as diferenças. Com --partial ele guarda o que já recebeu e retoma de onde parou. Num teste com arquivo de 96 MB, a transferência foi cortada aos 6,2 MB e concluída na segunda tentativa, com o hash sha256 idêntico ao original. Veja também backup com rsync e chave SSH em vez de senha.

Copiar uma pasta

bash
rsync -a origem/ destino/

A flag -a é o modo arquivo: recursivo, preserva permissões, tempos, links simbólicos e dono quando possível. A barra final importa. origem/ copia o conteúdo para dentro de destino/; origem sem barra cria destino/origem/.

Sincronizar de verdade com –delete

bash
rsync -a --delete origem/ destino/

--delete remove do destino o que não existe mais na origem. É o que transforma uma cópia em sincronização. O risco é inverter origem e destino, então rode o dry-run antes.

Testar antes com –dry-run

bash
rsync -avn --delete origem/ destino/

-n simula a execução e lista o que faria, inclusive exclusões, sem tocar em nada. Saída típica:

deleting extra.txt
./
arquivo.txt
sent 123 bytes  received 20 bytes

Se a lista parecer certa, rode o mesmo comando sem o -n.

Retomar com –partial

bash
rsync -a --partial --progress origem/ destino/

Se a transferência for interrompida com Ctrl+C, o arquivo parcial fica no destino. Rodar o mesmo comando de novo completa a partir do ponto em que parou. Para arquivos que crescem (logs), use --append-verify, que confere o trecho já copiado antes de continuar.

No teste, um arquivo de 96 MB foi cortado aos 6,2 MB e concluído na segunda tentativa; o sha256 do destino bateu com o da origem.

Medição da retomada

O arquivo de teste tinha 100.663.296 bytes (96 MiB) de dados aleatórios. A primeira tentativa foi cortada aos 6,2 MiB com limite de banda de 2 MB/s. A segunda tentativa completou a transferência e o sha256 do destino bateu com o da origem: b5d99ebc9e42501f97f61169d4058abe6a89c12032f11a037d9ff3e07bd48e9f. O ganho do --partial aparece quando a origem é remota ou a rede é instável: em vez de recomeçar, rsync aproveita o que já chegou.

Copiar por ssh

bash
rsync -a -e ssh usuario@servidor:/caminho/origem/ ./destino/
rsync -a -e "ssh -p 2222" ./origem/ usuario@servidor:/caminho/destino/

-e define o transporte. Combine com --partial para retomar uma cópia remota interrompida. Para chave específica, use -e "ssh -i ~/.ssh/chave".

Terminal com rsync -avn --delete listando o arquivo que seria removido e o que seria copiado, sem alterar nada
Dry-run do rsync: ele mostra o que faria, inclusive a exclusão, e não toca nos arquivos.

Opções que vale conhecer

Como verificar

bash
rsync -avn --delete origem/ destino/
sha256sum origem/arquivo destino/arquivo

O dry-run lista as mudanças sem aplicar. Os hashes batem quando a cópia terminou sem erro.

Se der errado

Comparação rápida

Ferramenta Copia só diferenças Retoma Remoto
cp não não não
scp não não sim (SSH)
rsync sim sim (--partial) sim (-e ssh)

FAQ

rsync copia arquivos ocultos? Sim. Com -a, arquivos que começam com ponto entram na cópia.

Preciso de rsync nos dois lados? Para cópia remota, sim: o rsync do destino recebe a conexão e monta o arquivo.

--partial deixa arquivo incompleto no destino? Até a cópia terminar, sim. Use --partial-dir=.rsync-parcial para esconder o arquivo parcial numa pasta temporária.

rsync criptografa o tráfego? Quando usado com -e ssh, sim. A cópia local não passa por rede.

rsync funciona entre sistemas de arquivos diferentes? Sim. Ele não depende do sistema de arquivos da origem; basta que ambos os lados consigam ler e escrever normalmente.

Fontes

bash
#!/usr/bin/env bash
# rsync na pratica: copiar, sincronizar e retomar.
# Rode sem argumentos para a demonstracao num diretorio temporario.
set -u

if ! command -v rsync >/dev/null 2>&1; then
    echo "rsync nao encontrado; instale o rsync para rodar este roteiro"
    exit 0
fi

W=$(mktemp -d)
cd "$W"

echo "=== 1. copia inicial ==="
mkdir -p origem destino
printf 'linha 1\nlinha 2\nlinha 3\n' > origem/arquivo.txt
rsync -a origem/ destino/
echo "destino:"; ls destino

echo "=== 2. sincronizacao com --delete ==="
printf 'linha 1 alterada\nlinha 2\nlinha 3\n' > origem/arquivo.txt
printf 'sobra\n' > destino/extra.txt
rsync -avn --delete origem/ destino/
rsync -a --delete origem/ destino/
echo "apos sync:"; ls destino

echo "=== 3. retomar com --partial ==="
head -c 6291456 /dev/urandom > origem/grande.bin 2>/dev/null || true
if [ -s origem/grande.bin ]; then
    timeout 1s rsync -a --partial --progress --bwlimit=2048 origem/grande.bin destino/ 2>/dev/null || true
    rsync -a --partial --progress origem/grande.bin destino/ 2>/dev/null || true
    cmp origem/grande.bin destino/grande.bin && echo "arquivo completo e identico"
fi

echo "=== 4. receita remota (nao executada) ==="
echo 'rsync -a --partial -e "ssh -i ~/.ssh/chave" usuario@servidor:/dados/ ./local/'

rm -rf "$W"
echo "fim"

Leia também

// Por e-mail

Os textos publicados aqui também vão por e-mail. O envio ainda não começou: quem deixar o endereço agora entra na primeira lista.

Guardo só o seu e-mail, a data e o registro desta autorização. Sem cookies, sem rastreador e nada compartilhado com terceiros. Detalhes na política de privacidade.