Vuoi sapere come tenere cartelle sincronizzate tra due dispositivi o tra computer e server? Il comando rsync su Linux ha proprio questa funzione: ci permette di copiare file e cartelle, tenerle sincronizzate e fare backup per evitare di sovrascrivere accidentalmente i dati.
In questa guida ti mostreremo i principali casi d’uso e le opzioni di questo comando.
Table of Contents
Sintassi del comando rsync
A differenza del comando cp, usato per semplici copie in locale, il comando rsync su Linux si utilizza soprattutto per copiare e mantenere sincronizzati i file tra dispositivi diversi: ad esempio tra due computer o tra un computer e un server.
Non a caso rsync sta per remote sync per indicare appunto la possibilità di effettuare sincronizzazioni tra cartelle locali e remote. Per far sì che questo sia possibile si deve stabilire una connessione con la macchina remota, come avremo modo di vedere nel dettaglio in questo guida, lo si fa tramite una connessione SSH.
Ad ogni modo il comando rsync funziona perfettamente anche per mantenere sincronizzate cartelle sullo stesso dispositivo a differenza di comandi usati principalmente per sincronizzazioni remote come il comando scp.
La sintassi di base del comando rsync è questa:
rsync [opzioni] [sorgente] [destinazione]
Bisogna quindi usare il comando con o senza opzioni e poi specificare prima la sorgente, cioè il file o la cartella da copiare, e dopo la destinazione, cioè il percorso dove avverrà la copia.
Per esempio per copiare il contenuto della cartella “Documenti” nella cartella “backup”, si può usare il comando seguente:
rsync -a /home/vbox/Documenti/ /home/vbox/Scaricati/backup/
L’esempio qui sopra riguarda la sincronizzazione locale, sullo stesso computer, e con l’opzione -a stiamo mantenendo tutti i dettagli dei file originali (timestamp, permessi, ecc.).
Non preoccuparti se ora non è tutto chiaro, con gli esempi che andremo a vedere capirai meglio come usare questo comando.
Casi d’uso del comando rsync
Andiamo a vedere dei casi pratici dell’utilizzo del comando rsync. In particolare vedremo:
- come fare un test (opzione
--dry-run) prima della copia a tutti gli effetti; - come fare una copia di una cartella e perché fare attenzione al trailing slash finale;
- come mantenere gli attributi e i permessi;
- fare una copia con sorgente locale e destinazione server remoto;
- fare una copia usando come sorgente una macchina remota e destinazione una cartella locale.
Fare un test prima della copia
Prima di iniziare a utilizzare il comando rsync è importante sapere che le modifiche nella cartella di destinazione verranno effettuate senza richiedere conferma. Questo significa che usando il comando rsync per sincronizzare due cartelle o dei file, potresti sovrascrivere accidentalmente i file.
Il modo più sicuro se non sai bene come procedere, è fare prima un test.
Il comando rsync ha un’opzione, --dry-run, che insieme a -v (verbose) permette di mostrare i cambiamenti che apporterà senza però fare ancora nessuna modifica.
Dopo che con questa opzione ti sarai assicurato che la copia che vuoi fare è corretta, potrai ridare lo stesso comando senza l’opzione, per eseguire a tutti gli effetti la copia.
L’opzione si usa in questo modo:
rsync -av --dry-run /home/vbox/Documenti/SupportHost/articoli/2025/ /home/vbox/Scaricati/backup/

Possiamo usare l’opzione estesa --dry-run o la versione abbreviata -n:
rsync -avn /percorso-origine/ /percorso-destinazione/
Sincronizzazione tra cartelle
Per utilizzare correttamente il comando rsync, bisogna fare attenzione alla sintassi che utilizziamo. Questo vale il particolar modo quando stiamo sincronizzando due cartelle.
La cosa a cui dobbiamo fare attenzione è lo slash finale dopo il nome della cartella di origine.
Vediamo due esempi per capire bene come funziona.
Se vogliamo copiare solo il contenuto della cartella di origine, senza la cartella stessa dobbiamo inserire lo slash dopo il nome della cartella.
Guarda questo esempio:
rsync -a /home/vbox/Documenti/SupportHost/articoli/2025/ /home/vbox/Scaricati/backup/
Nel caso qui sopra voglio copiare il contenuto della cartella “2025” nella cartella “backup”.
Come risultato avrò che solo il contenuto della cartella “2025” verrà copiato nella cartella backup, come si vede nell’esempio qui sotto in cui ho usato il comando ls per vedere il contenuto delle due cartelle.

Se, invece, voglio copiare l’intera cartella di origine con tutto il contenuto, dovrò usare lo stesso comando, ma senza lo slash finale, così:
rsync -a /home/vbox/Documenti/SupportHost/articoli/2025 /home/vbox/Scaricati/backup/
In questo caso, come si vede nell’esempio, ho copiato la cartella “2025” (e il suo contenuto) nella cartella “backup”.

Sincronizzare due cartelle mantenendo permessi, date e link simbolici
Uno degli utilizzi più comuni del comando rsync non è creare una semplice copia, ma fare una vera e propria sincronizzazione.
Per esempio immaginiamo di voler creare la copia di backup di una cartella e tenere le due cartelle, l’originale e la copia di backup sempre sincronizzate.
In questo caso non vogliamo soltanto copiare il contenuto della cartella, ma vogliamo anche assicurarci che i permessi, il proprietario e il gruppo associati ai file e i link simbolici siano mantenuti.
Il comando rsync ha proprio un’opzione che ci permette di farlo: --archive o -a.
Vediamo questo esempio.
rsync -a /home/vbox/Documenti/SupportHost/articoli/2025/aprile/ /home/vbox/Scaricati/backup/
Usando l’opzione -a sto eseguendo una copia esatta dei file, in questo caso del contenuto della cartella “aprile” e questa copia include anche i link simbolici.

Se, invece, avessi fatto una copia usando l’opzione -r, i link simbolici non sarebbero stati copiati. In questo caso, inoltre, ci viene indicato dal prompt che il file “esempio”, un link simbolico, non è stato copiato.

Fare una sincronizzazione da locale a remoto
Negli esempi precedenti abbiamo visto la copia di file con cartella di origine e destinazione sullo stesso computer.
Come dicevamo all’inizio di questa guida, rsync è un comando molto utile per sincronizzare i file anche tra macchina locale e remota.
In questi casi ci serve avere una connessione SSH per poterci collegare alla macchina remota che può essere ad esempio un server o un altro computer connesso alla stessa rete.
Ai fini di questo esempio vedremo un collegamento con un dispositivo connesso alla stessa rete, per questo nell’esempio vedrai un IP locale. Il procedimento è comunque identico anche se non stai usando la rete locale, ma connettendoti a un server.
Per utilizzare il comando rsync abbiamo bisogno di collegarci via SSH (con password o chiave). Puoi seguire la guida alla connessione SSH se hai bisogno di sapere come collegarti.
La sintassi del comando è questa:
rsync -a /percorso-origine/ username@host:/percorso-destinazione/
- /percorso-origine/ è la cartella locale sul tuo computer che vuoi copiare;
- username@host indica le credenziali della macchina remota, quindi dovrai specificare username e host, ad esempio l’IP.
- /percorso-destinazione/ è il percorso di destinazione, cioè la cartella dove verranno copiati i file.
Per esempio:
rsync -ani /home/vbox/Documenti/SupportHost/nuovo/ fabrizio@192.168.1.6:/home/fabrizio/test_rsync/
Il comando qui sopra copia il contenuto della cartella “nuovo” nella cartella “test_rsync” del computer remoto.

L’esempio qui sopra presenta l’opzione -n per effettuare un dry-run, cioè un test, e non una vera e propria copia.
Sincronizzare i file da remoto a locale
Analogamente a quanto abbiamo visto nell’esempio precedente, possiamo effettuare una sincronizzazione dei file usando come sorgente una cartella remota e come destinazione una cartella locale.
La sintassi è questa:
rsync -a username@host:/percorso-origine/ /percorso-destinazione/
- username@host sono le credenziali SSH per collegarci alla macchina remota;
- /percorso-origine/ indica il percorso della cartella remota da sincronizzare;
- /percorso-destinazione/ indica la cartella locale in cui verranno copiati i file.
Per esempio:
rsync -ani fabrizio@192.168.1.6:/home/fabrizio/Immagini/ ~/Immagini-server-remoto/
Con questo comando stiamo copiando il contenuto della cartella remota “Immagini” nella cartella locale “Immagini-server-remoto”.
Nota che nell’esempio viene usata l’opzione -n (--dry-run) per eseguire un test e non una copia vera e propria.

Altre opzioni del comando rsync
Adesso che conosciamo le operazioni di base che si possono eseguire con il comando rsync, passiamo alle principali opzioni.
Come altri comandi Linux, anche il comando rsync ha diverse opzioni. Alcune le abbiamo già viste negli esempi precedenti come:
- l’opzione
-ache mantiene gli attributi dei file; - l’opzione
-rche permette di copiare in modo ricorsivo e quindi può essere usata per le cartelle; - l’opzione
-n(o--dry-run) che permette di eseguire test.
Nei prossimi esempi, invece, vedremo queste altre opzioni:
--deletee--backuputili quando vogliamo fare un mirroring tra cartelle ed evitare di perdere dati;--progressper avere una barra che mostra l’avanzamento della copia--itemize-changesper mostrare i dettagli durante l’esecuzione del comando--updateper evitare di sovrascrivere i file quando sono risultano più aggiornati.
Sincronizzare le cartelle facendo un mirroring
Negli esempi che abbiamo visto prima, il comando rsync va a copiare il contenuto della cartella di origine in quella di destinazione. Ma cosa succede se nella cartella di destinazione c’erano già file che non sono presenti in quella di origine?
Se non usiamo altre opzioni, il contenuto della cartella di destinazione non viene modificato.
Facciamo un esempio pratico per capire meglio.
Voglio sincronizzare due cartelle:
- “aprile” è la mia cartella di origine
- “backup” è la destinazione.
In questa sincronizzazione voglio fare un vero e proprio mirroring delle cartelle, cioè se nella cartella “backup” ci sono file che non sono presenti in “aprile”, voglio che siano cancellati.
Per farlo si utilizza l’opzione --delete.
rsync -a --delete /home/vbox/Documenti/SupportHost/articoli/2025/aprile/ /home/vbox/Scaricati/backup/
In questo esempio, la cartella “backup” aveva già del contenuto. Se usiamo il comando qui sopra con l’opzione --delete, tutto ciò che è presente in “backup” ma non è presente in “aprile” (la cartella di origine) viene eliminato.
Altrimenti, viene eseguita solo la copia del contenuto nuovo, ma il resto della cartella “backup” viene lasciato inalterato. Nell’esempio qui sopra puoi vedere come varia l’effetto di rsync in base all’uso o meno dell’opzione --delete.
Attenzione: l’utilizzo dell’opzione --delete comporta la cancellazione definitiva dei file.
Un modo per evitare di perdere file accidentalmente è usare l’opzione --delete insieme all’opzione --backup.
Quando usiamo l’opzione --backup andiamo a specificare una nuova cartella in cui verrà conservata una copia dei file della cartella di destinazione ogni volta che avviene un aggiornamento o un’eliminazione.
rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination
Facciamo un esempio:
In questo caso vogliamo sincronizzare la cartella “aprile” con la cartella “copia” e usare la cartella “backup” per conservare un backup dei file modificati o eliminati.
rsync -a --delete --backup --backup-dir=/home/vbox/Scaricati/backup/ /home/vbox/Documenti/SupportHost/articoli/2025/aprile/ /home/vbox/Scaricati/copia/

Il risultato sarà che:
- i file nella cartella aprile vengono copiati nella cartella copia;
- i file nella cartella copia che non sono presenti in aprile, verranno eliminati (grazie all’opzione
--delete); quelli da aggiornare verranno sovrascritti; - tutti i file interessati dal processo di copia, quindi quelli aggiornati o eliminati nella cartella copia, verranno prima salvati nella cartella di backup (nell’esempio la cartella con nome “backup”).
Come aggiungere la barra di progresso
Quando facciamo sincronizzazioni di cartelle o file pesanti, può essere comodo poter seguire l’avanzamento della copia. Il comando rsync ha un’opzione molto utile a questo proposito: --progress.
Usando questa opzione ci verranno mostrate diverse informazioni:
- la quantità di dati trasferiti
- la percentuale
- la velocità di trasferimento
- il tempo restante.
Qui sotto puoi vedere un esempio.
Come avere dettagli sui file durante la copia
L’opzione --itemize-changes o -i ci permette di vedere in tempo reale cosa sta facendo il comando durante l’esecuzione. In particolare ci permette di capire se vengono modificati gli attributi dei file o se vengono creati nuovi file.
Possiamo aggiungere l’opzione al comando rsync in questo modo:
rsync -ai /home/vbox/Documenti/SupportHost/articoli/2025/aprile/ /home/vbox/Scaricati/backup/
Come vedi in questo caso abbiamo combinato le opzioni a e i.
Vediamo come si legge l’output dell’opzione --itemize-changes:
- Il primo carattere indica il tipo di trasferimento:
<vuol dire che il file è inviato>indica un file ricevutocindica un cambiamento a livello locale, come la creazione del filehindica gli hard link.indica che non è stato aggiornato.
- Il secondo carattere indica il tipo di file
- f – file
- d – cartella
- l – link simbolico
- D – dispositivo
- s – file speciali.
- Il terzo valore indica il checksum. Un cambiamento nel checksum sarà rappresentato da una c.
- La dimensione. Un cambiamento sarà rappresentato da una s.
- Se il timestamp è stato modificato, vedremo una t.
- Le modifiche ai permessi saranno indicate con p.
- Se cambia il proprietario, vedremo una o.
- Per il gruppo vedremo una g.
- È uno slot che viene mantenuto per usi futuri, al momento non indica nulla.
- Si riferisce ai cambiamenti ACL, se ce ne sono vedremo una a.
Ecco un esempio dell’uso del comando rsync con l’opzione -i:

Prendiamo come esempio questo output:
>f.st...... esempio.txt
Come si legge l’output:
>indica che il file è stato cambiato nella posizione di destinazione;findica che si tratta di un file;sindica che è cambiata la dimensione del file;tindica che è cambiato il timestamp.
In questo altro caso:
.f....og... esempio.txt
Nell’output qui sopra la o e la g indicano che sono stati aggiornati il proprietario (o) e il gruppo (g) del file.
Evitare sovrascritture indesiderate con l’opzione update
In base al tipo di sincronizzazione che vogliamo effettuare, è possibile che vogliamo evitare sovrascritture quando il file che è già presente nella destinazione è stato aggiornato più di recente rispetto al file nella cartella di origine.
In questi casi ci viene in aiuto l’opzione -u (--update).
Se usiamo rsync con l’opzione -u i file nella destinazione che hanno una data di modifica successiva a quella del file nella cartella di origine, non verranno sovrascritti.
Conclusioni
Il comando rsync è utile per creare un backup su un altro dispositivo, ma anche per tenere sincronizzate le cartelle tra un pc locale e un server remoto. In questa guida abbiamo visto esempi di utilizzo del comando insieme alle sue principali opzioni. Le opzioni ci permettono di estendere l’uso del comando in base alle nostre esigenze ad esempio avendo maggiori dettagli durante la copia (progress) o evitando di perdere dati importanti facendo prima un backup (opzione backup) e preservando i file modificati che rischiano una sovrascrittura (opzione update).
Conoscevi già questo comando? Condividi la tua esperienza nei commenti.
Pronto a costruire il tuo sito WordPress?
Prova il nostro servizio gratuitamente per 14 giorni. Nessun impegno, nessuna carta di credito richiesta.