# Sincronização de dados com o rsync

O rsync é uma ferramenta versátil que simplifica a transferência de ficheiros através de ligações de rede e acelera a sincronização de diretórios locais. A sua grande flexibilidade torna esta ferramenta de sincronização numa excelente opção para uma grande variedade de operações com ficheiros.

## O que é o rsync?

O rsync, abreviatura de *«remote synchronisation»* (sincronização remota), é uma **ferramenta de sincronização** flexível e compatível com redes no Linux. Este programa de código aberto pode ser utilizado para sincronizar ficheiros e pastas entre sistemas locais ou através de redes. A ferramenta utiliza uma **técnica de transferência diferencial de dados**, na qual apenas são transferidas as secções de dados que realmente foram alteradas. Isto minimiza a troca de dados e acelera consideravelmente o processo de sincronização. Graças a uma grande variedade de opções, o rsync permite **controlar com precisão o comportamento da sincronização. A sintaxe flexível permite tanto cópias locais simples como sincronizações de rede complexas**.

## A sintaxe do rsync

A sintaxe dos comandos do rsync tem uma estrutura simples e é semelhante à do SSH, SCP e CP. A estrutura básica é a seguinte:

```bash
rsync [OPTION] source destination
```

O caminho de origem a partir do qual os dados serão sincronizados é introduzido no parâmetro `source`, enquanto o caminho de destino é introduzido no parâmetro `destination`. Para tal, o rsync oferece uma **variedade de opções** que permitem adaptar o processo de sincronização às necessidades específicas. As opções mais utilizadas são:

- `-a` (Archive): mantém recursivamente as permissões dos ficheiros, os registos de data e hora, os grupos, os proprietários e as propriedades especiais dos ficheiros.
- `-v` (Verbose): mostra informações detalhadas sobre o processo de sincronização.
- `-r` (Recursivo): sincroniza os diretórios e o seu conteúdo de forma recursiva.
- `-u` (Update): transfere apenas os ficheiros mais recentes do que os que se encontram no diretório de destino.
- `-z` (Compress): reduz o tráfego de dados através da rede.
- `-n` –itemize-changes: apresenta uma lista das alterações a realizar.
- `--delete`: elimina ficheiros do diretório de destino que já não existem na origem.
- `--exclude`: exclui determinados ficheiros ou diretórios da sincronização.
- `--dry-run`: simula o processo de sincronização sem transferir os ficheiros.
- `--progress`: mostra o progresso da transferência de ficheiros.
- `--partial`: os ficheiros que foram parcialmente transferidos permanecem no diretório de destino se a transferência for interrompida. Quando a transferência é retomada, o ficheiro continua a partir do seu último estado.

## Exemplo de sintaxe do rsync

A sintaxe do rsync pode ser facilmente compreendida com um exemplo. O comando seguinte cria o diretório `dir1` com cem ficheiros de teste vazios e um segundo diretório vazio, `dir2`:

```bash
$ cd ~
$ mkdir dir1
$ mkdir dir2
$ touch dir1/file{1..100}
```

O conteúdo de `dir1` pode ser sincronizado no mesmo sistema com `dir2` utilizando a opção `-r`:

```bash
$ rsync -r dir1/ dir2
```

Em alternativa, pode utilizar-se a opção `-a`, que sincroniza recursivamente e inclui ligações simbólicas, ficheiros de dispositivos especiais, datas de modificação, grupos, proprietários e permissões:

```bash
$ rsync -a dir1/ dir2
```

**Nota**. A barra (/) no final do diretório de origem num comando rsync é importante porque indica que **se deve sincronizar o conteúdo do diretório, e não o próprio diretório**.

```bash
$ rsync -a dir1/ dir2
Output
sending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .
```

Sem a barra final no diretório de origem, o conteúdo do diretório de origem é copiado para o diretório de destino:

```bash
$ rsync -a dir1/ dir2
Output
sending incremental file list
dir1/
dir1/file1
dir1/file10
dir1/file100
dir1/file11
dir1/file12
dir1/file13
dir1/file14
dir1/file15
dir1/file16
dir1/file17
dir1/file18
. . .
```

Na prática, portanto, faz sentido utilizar a barra no final do diretório de origem para garantir que o processo de sincronização decorra conforme o esperado e que o conteúdo do diretório de origem seja corretamente transferido para o diretório de destino.

## rsync: sincronização com um sistema remoto

Sincronizar um sistema remoto com o rsync não costuma ser difícil, desde que se tenha **acesso SSH ao computador remoto** e se conheçam os dados de autenticação necessários. O rsync costuma utilizar o SSH (Secure Shell) para uma comunicação segura com sistemas remotos. A ferramenta também deve estar instalada em ambos os lados.

Se for verificado o acesso SSH entre os dois computadores, é possível sincronizar a pasta `dir1` num computador remoto. Neste caso, será transferido o diretório real, pelo que se omite a barra final no comando seguinte:

```bash
$ rsync -a ~/dir1 username@remote_host:destination_directory
```

Quando se transfere um diretório de um sistema local para um sistema remoto, fala-se de uma operação **«push».** Por outro lado, quando se sincroniza um diretório remoto com um sistema local, fala-se de uma operação **«pull».** A sintaxe é a seguinte:

```bash
$ rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
```

## Utilização de outras opções no rsync

O comportamento padrão do rsync pode ser ainda mais personalizado utilizando as opções apresentadas anteriormente.

### Transferência de ficheiros não compactados com o rsync

A carga da rede ao transferir ficheiros não comprimidos pode ser reduzida da seguinte forma, utilizando a opção `-z`:

```bash
$ rsync -az source destination
```

### Visualizar o progresso e retomar as transmissões interrompidas

Com `-P`, pode combinar as opções `--progress` e `--partial`. Isto dá-lhe uma visão geral do andamento das transferências e permite-lhe retomar as transferências interrompidas ao mesmo tempo:

```bash
$ rsync -azP source destination
Output
sending incremental file list
./
file1
    0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=99/101)
file10
    0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=98/101)
file100
    0 100%    0.00kB/s    0:00:00 (xfer#3, to-check=97/101)
file11
    0 100%    0.00kB/s    0:00:00 (xfer#4, to-check=96/101)
. . .
```

Execute o comando novamente para obter um resultado mais conciso. Isto permite ao rsync determinar se foram feitas alterações com base nos tempos de modificação.

```bash
$ rsync -azP source destination
Output
sending incremental file list
sent 818 bytes received 12 bytes 1660.00 bytes/sec
total size is 0 speedup is 0.00
```

### Manter os diretórios sincronizados com o rsync

Para garantir que dois diretórios permaneçam realmente sincronizados, é necessário **eliminar** do diretório de destino **os ficheiros** que foram removidos do diretório de origem. Por predefinição, no entanto, o rsync não elimina nenhum ficheiro do diretório de destino. Este comportamento pode ser alterado com a opção `--delete`. No entanto, é aconselhável utilizar esta opção com precaução, uma vez que elimina do diretório de destino os ficheiros que já não existem no diretório de origem.

Antes de utilizar esta opção, deve utilizar a opção `--dry-run`. Isto permite-lhe **simular o processo de sincronização** sem apagar os ficheiros reais. Desta forma, garante que apenas são efetuadas as alterações pretendidas, sem perder acidentalmente dados importantes:

```bash
$ rsync -a --delete source destination
```

### Excluir ficheiros e pastas da sincronização com o rsync

No rsync, pode utilizar a opção `--exlude` para **excluir** determinados ficheiros e diretórios da sincronização. Isto é útil se, por exemplo, ficheiros temporários, ficheiros de registo ou outros conteúdos não devessem ser sincronizados.

```bash
$ rsync -a --exclude=pattern_to_exclude source destination
```

Se tiver especificado um padrão para excluir ficheiros, pode substituir essa exclusão para os ficheiros que correspondam a um padrão diferente, utilizando a opção `--include=`.

```bash
$ rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination
```

### Fazer cópias de segurança com o rsync

A opção `--backup` permite guardar cópias de segurança de ficheiros importantes. É utilizada em conjunto com a opção `--backup-dir`. Esta opção especifica o diretório onde os ficheiros de cópia de segurança serão guardados:

```bash
$ rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination
```

Encontrará uma descrição detalhada dos diferentes cenários de cópia de segurança no nosso artigo[«Criar cópias de segurança do servidor com o rsync](https://www.ionos.com/pt-pt/digitalguide/servidores/ferramentas/como-criar-copias-de-seguranca-do-servidor-com-o-rsync/)».


This is a markdown version of: [https://www.ionos.com/pt-pt/digitalguide/servidores/ferramentas/rsync/](https://www.ionos.com/pt-pt/digitalguide/servidores/ferramentas/rsync/) for AI/LLM consumption.