# Sincronizzazione dei dati con rsync

rsync è un versatile strumento che semplifica il trasferimento dei file in rete e accelera la sincronizzazione delle cartelle locali. Grazie all’elevata flessibilità, è un’eccellente opzione per eseguire svariate operazioni a livello di file.

## Cos’è rsync?

rsync, abbreviazione di “remote synchronization”, è un flessibile **strumento di sincronizzazione** collegabile in rete su [Linux](https://www.ionos.it/digitalguide/server/know-how/linux-lalternativa-conveniente-a-windows/). Il programma open source permette di sincronizzare file e cartelle in sistemi locali o in rete. A questo scopo utilizza una **tecnologia di trasmissione dati differenziale** che trasferisce solo le sezioni di dati effettivamente modificate. Così si riduce al minimo lo scambio di dati, accelerando notevolmente il processo di sincronizzazione. Grazie a una serie di opzioni, rsync permette di **controllare con precisione il comportamento di sincronizzazione**. La sintassi flessibile consente inoltre sia di creare semplici copie locali sia di eseguire complesse sincronizzazioni in rete.

## La sintassi di rsync

La sintassi di comando di rsync, strutturata in modo semplice, assomiglia a quella di [SSH](https://www.ionos.it/digitalguide/server/tools-o-strumenti/ssh/), [SCP](https://www.ionos.it/digitalguide/server/know-how/scp-secure-copy/) e [CP](https://www.ionos.it/digitalguide/server/configurazione/linux-comando-cp/). La struttura di base si presenta come segue:

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

In `source` viene inserito il percorso di origine da cui sincronizzare i dati, mentre in `destination` si indica il percorso di destinazione. A questo scopo rsync offre **numerose opzioni** per adattare il processo di sincronizzazione alle proprie esigenze. Tra le opzioni usate più di frequente troviamo:

- `-a` (archive): contiene in modo ricorsivo autorizzazioni di file, indicatori di data e ora, gruppi, utenti e proprietà particolari dei file.
- `-v` (verbose): mostra informazioni dettagliate sul processo di sincronizzazione.
- `-r` (recursive): sincronizza le cartelle e i relativi contenuti in modo ricorsivo.
- `-u` (update): trasmette solo i file aggiornati rispetto a quelli già presenti nella cartella di destinazione.
- `-z` (compress): riduce il traffico di dati in rete.
- `-n` --itemize-changes: mostra una lista delle modifiche da apportare.
- `--delete`: elimina dalla cartella di destinazione i file che non esistono più nella cartella di origine.
- `--exclude`: esclude determinati file o cartelle dalla sincronizzazione.
- `--dry-run`: simula il processo di sincronizzazione senza trasmettere realmente i file.
- `--progress`: indica l’avanzamento del processo di trasmissione dei file.
- `--partial`: i file trasmessi parzialmente restano nella cartella di destinazione se la trasmissione viene interrotta. Quando viene eseguita una nuova trasmissione, il processo riprende dall’ultimo stato.

## Esempio di sintassi di rsync

Per spiegare la sintassi di rsync ricorriamo a un esempio pratico. Con il comando seguente vengono create la cartella `dir1` con 100 file di prova vuoti e una seconda cartella `dir2` vuota:

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

Il contenuto di `dir1` può essere sincronizzato nello stesso sistema con `dir2` usando l’opzione `-r`:

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

In alternativa, si può usare l’opzione `-a`, che esegue la sincronizzazione in modo ricorsivo e contiene link simbolici, file di dispositivi speciali, data e ora di modifica, gruppi, proprietari e autorizzazioni:

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

**N.B.**: la barra rovesciata (/) alla fine della cartella di origine in un comando rsync è importante perché indica che è il **contenuto della cartella a dover essere sincronizzato, non la cartella stessa**.

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

Senza la barra rovesciata dopo la cartella di origine, il contenuto di questa cartella viene copiato nella cartella di destinazione:

```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
…
```

Nella pratica è quindi utile inserire la barra rovesciata alla fine della cartella di destinazione per assicurarsi che il processo di sincronizzazione si svolga nel modo previsto e che il contenuto della cartella di origine confluisca correttamente nella cartella di destinazione.

## rsync: sincronizzazione con un sistema remoto

In generale, sincronizzare un sistema remoto con rsync non è difficile. Basta disporre dell’**accesso SSH al computer remoto** e conoscere i dati di autenticazione necessari. rsync utilizza spesso [SSH (Secure Shell)](https://www.ionos.it/digitalguide/server/tools-o-strumenti/ssh/) per la comunicazione sicura con i sistemi remoti. Lo strumento deve essere installato su entrambi i lati.

Una volta verificato l’accesso SSH tra i due computer è possibile sincronizzare la cartella `dir1` su un computer remoto. In questo caso deve essere trasmessa la cartella vera e propria, pertanto nel comando seguente non è presente la barra rovesciata alla fine della cartella:

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

Quando una cartella viene spostata da un sistema locale a un sistema remoto si parla di **operazione “push”**. Al contrario, l’**operazione “pull”** sincronizza una cartella remota con un sistema locale. La sintassi si presenta come segue:

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

## Utilizzo di altre opzioni in rsync

Le opzioni presentate sopra consentono di personalizzare il comportamento di rsync.

### Trasmissione di file non compressi con rsync

Il carico sulla rete durante la trasmissione di file non compressi può essere ridotto con l’opzione `-z` procedendo come indicato di seguito:

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

### Visualizzare l’avanzamento e riprendere le trasmissioni interrotte

Con `-P` puoi combinare fra loro le opzioni `--progress` e `--partial`. Visualizzi così una panoramica dell’avanzamento della trasmissione e allo stesso tempo puoi riprendere le operazioni interrotte:

```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)
…
```

Esegui nuovamente il comando per generare un output più breve. Grazie a data e ora delle modifiche, con rsync è possibile determinare se sono state apportate modifiche.

```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
```

### Mantenere le cartelle sincronizzate con rsync

Per assicurarsi che due cartelle restino realmente sincronizzate è necessario **eliminare dalla cartella di destinazione i file** che sono stati rimossi dall’origine. Tuttavia, per impostazione predefinita rsync non elimina i file dalla cartella di destinazione. Questo comportamento può essere modificato con l’opzione `--delete`. Questa opzione è da usare in ogni caso con cautela, perché elimina dalla cartella di destinazione i file che non sono più presenti nell’origine.

Prima di ricorrervi, si dovrebbe usare l’opzione `--dry-run`, che permette di eseguire una **simulazione del processo di sincronizzazione** senza eliminare i file effettivi. Puoi così assicurarti che vengano apportate solo le modifiche desiderate, senza perdere accidentalmente dati importanti:

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

### Escludere file e cartelle dalla sincronizzazione con rsync

In rsync con l’opzione `--exclude` è possibile escludere determinati file e cartelle **dalla sincronizzazione**. È utile quando non si devono sincronizzare ad esempio file temporanei, file di registro o altri contenuti.

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

Una volta indicato un modello per escludere file è possibile sovrascrivere l’esclusione per i file corrispondenti a un altro modello con l’opzione `--include=`.

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

### Salvare i backup con rsync

L’opzione `--backup` offre la possibilità di salvare backup dei dati importanti. È usata insieme all’opzione `--backup-dir`, che indica la cartella in cui devono essere salvati i file di backup:

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

Per un quadro più preciso dei diversi scenari di backup, consulta il nostro articolo su come creare un [backup del server con rsync](https://www.ionos.it/digitalguide/server/tools-o-strumenti/fare-il-backup-del-server-con-rsync/).


This is a markdown version of: [https://www.ionos.it/digitalguide/server/tools-o-strumenti/rsync/](https://www.ionos.it/digitalguide/server/tools-o-strumenti/rsync/) for AI/LLM consumption.