Di backup su Macitynet abbiamo parlato in lungo e in largo mostrandovi varie strade possibili, segnalandovi software di vario tipo e suggerendovi le più svariate strategie. Ad esempio vi abbiamo detto come usare Time Machine per trasferire i backup su un altro Mac, come effettuare i backup su Mac nella stessa rete e anche come gestirli in una cartella in rete di un PC con Windows.
Più di recente vi abbiamo parlato anche di arRsync, un’app leggerissima tramite cui poter effettuare il backup di cartelle e file specifici, ovvero il contrario del backup selettivo di Time Machine dove invece si possono soltanto escludere questo tipo di file.
Cos’è rsync
Oggi approfondiamo l’argomento parlandovi in maniera specifica di rsync, ovvero il comando da Terminale utilizzato da alcuni software come appunto la suddetta app (se ci fate caso infatti il nome stesso del programma lo richiama).
Se dovessimo definirlo in una frase, vi diremmo allora che si tratta di un modo semplice e affidabile per trasferire file da una sorgente a una destinazione. Il metodo è antichissimo (nasce nel 1996 su Linux) e allo stesso tempo immortale proprio perché si basa su semplice comando da digitare nel Terminale.
Prima di proseguire, una precisazione: questo articolo è da intendersi come una guida per comprendere le basi dello strumento. Trattasi cioè di una di quelle che potremmo chiamare “beginners guide”, una guida per principianti e che quindi non ha la pretesa di fare la lezione a chi già conosce l’argomento.
Piuttosto è dedicata a tutti quelli che non hanno mai sentito parlare di rsync e di conseguenza vorrebbero saperne di più, fino ad arrivare ad usarlo per gestire i propri backup.

Perché usare rsync
Diciamo questo anzitutto perché l’approccio diretto ed estremamente semplificato di rsync può tuttavia apparire un po’ troppo “da nerd” soprattutto per chi il Terminale non l’ha mai aperto neppure una volta.
Ci si potrebbe per altro chiedere il motivo per cui si dovrebbero affidare i propri dati ad un sistema manuale e apparentemente macchinoso quando esistono decine di software – anche gratuiti – che fanno la stessa cosa e attraverso una interfaccia grafica certamente più facile da comprendere in particolar modo a chi è meno avvezzo alla tecnologia.
In realtà i vantaggi di rsync rispetto a qualsiasi altra soluzione di backup sono molteplici e nulla affatto trascurabili.
Innanzitutto come dicevamo il fatto che esiste dal 1996 è già di per sé un’ottima garanzia in termini di durabilità nel tempo: se ancora oggi esiste, nonostante l’enorme evoluzione tecnologica che è passata nel mezzo, allora vuol dire che ci sono buone probabilità che continuerà a funzionare ancora a lungo, contrariamente a quanto invece accade con tantissimi altri software, magari più semplici da usare per via dell’interfaccia grafica, che per qualsiasi motivo potrebbero smettere di essere sviluppati oppure perdere la compatibilità con hardware più vecchio.
A parte ciò, lo consigliamo anche perché:
- questo comando effettua una vera e propria “fotocopia” di file e cartelle (e loro contenuto) in un altro percorso, anche su dischi esterni;
- permette poi di gestire in maniera intelligente nuovi file, cancellazioni e modifiche;
- soprattutto, trasferisce soltanto le parti modificate dei file, quindi vengono drasticamente ridotti i tempi di trasferimento.

Come funziona rsync
Come accennato, rsync funziona da linea di comando ma si può utilizzare anche attraverso interfacce grafiche più intuitive come l’app arRsync di cui vi abbiamo già parlato in precedenza.
Pubblichiamo tuttavia questo articolo per tutti quelli che hanno voglia di comprendere a fondo la funzione che governa l’intero sistema: a quel punto infatti sarà possibile eliminare per sempre la dipendenza da qualsiasi software e gestire in maniera precisa ed estremamente personale ogni singolo aspetto del backup.
Per capire come funziona rsync partiamo innanzitutto dalla sintassi, che è la seguente: rsync opzioni sorgente destinazione
.
- Con la prima parola, rsync, si aziona il comando da eseguire. Badate che non bisogna installare nulla perché si tratta di uno strumento di sistema che trovate quindi già accessibile tramite l’app Terminale preinstallata in ogni Mac.
- Dopo aver dato uno spazio al comando si inseriscono le varie opzioni che definiscono il suo funzionamento e il comportamento per quanto riguarda i file che vengono presi in esame (ve ne parliamo nel prossimo paragrafo).
- Ancora uno spazio per indicare separatamente le varie sorgenti, che possono essere appunto singoli file o intere cartelle.
- L’ultimo percorso inserito dovrà essere invece la destinazione del backup, che può essere un’altra posizione all’interno del Mac oppure un disco esterno.

I comandi di rsync
Chi lo desidera trova la documentazione completa di rsync a questo indirizzo.
Per conoscere tutti i comandi disponibili per rsync si può anche aprire il Terminale e digitare: rsync -h
per aprire l’helper.
Di seguito vi riportiamo un elenco delle opzioni più usate e la relativa spiegazione:
-v
Descrive nel dettaglio quello che sta facendo rsync.-a
Preserva le informazioni del file (proprietà, permessi, timestamp, simboli di collegamento, eccetera).-x
: Questo comando dice a rsync di non attraversare i filesystem, cioè di copiare solo i file e le directory che si trovano all’interno della stessa partizione o dispositivo. Se ci sono montaggi di filesystem esterni, non saranno copiati.--progress
: Mostra il progresso del trasferimento dei file, con una barra di avanzamento e altre informazioni sul trasferimento di ciascun file.--info=progress2
: Mostra il progresso complessivo in percentuale per tutto il trasferimento.--delete
: Elimina i file nella destinazione che non esistono più nella sorgente. In altre parole, se un file viene rimosso dalla sorgente, viene rimosso anche nella destinazione.--relative
: Preserva la struttura delle cartelle di origine dentro la destinazione.\ --exclude='._*'
: Esclude dal backup i file con prefisso._
ovvero quei file speciali creati da macOS per gestire correttamente i metadati su piattaforma non-Apple.--exclude /percorso/da/escludere/*
: Esclude dalla sincronizzazione i file e le directory specificate nel percorso indicato (/percorso/da/escludere/*
), evitando che vengano copiati nella destinazione.--delete-excluded
: Se vengono esclusi dei file dalla sincronizzazione, questa opzione fa sì che i file già presenti nella destinazione e che corrispondono agli esclusi vengano eliminati. Quindi, i file che sono stati esclusi dalla sorgente non saranno più nella destinazione, se erano presenti.--dry-run
Esegue una dimostrazione di quello che succederebbe eseguendo il comando.

Come usare rsync
Esempio 1
Quindi, come funziona? per aiutarvi a capire facciamo subito qualche esempio. Digitando un comando come:
rsync -xaEv --progress --info=progress2 --delete "/percorso/sorgente/A" "/percorso/destinazione/B"
stiamo dicendo di fotocopiare la cartella A nella cartella B.
Nello specifico, dopo aver messo in campo il comando rsync, attraverso la sigla -xaEv
abbiamo:
- limitato la sincronizzazione ai filesystem locali anche se la directory sorgente contiene montaggi di altri filesystem (
x
); - chiesto di copiare la directory in modo ricorsivo e di mantenere la maggior parte delle proprietà dei file come i permessi, i timestamp, i proprietari, e via dicendo (
a
); - incluso i file che sono stati aperti da un’applicazione, come i file di lock o temporanei;
- attivato la modalità verbosa per ottenere informazioni dettagliate su cosa sta facendo rsync, il che è particolarmente utile per seguire i vari passaggi ed individuare eventuali anomalie;
Insieme al suddetto verbose abbiamo poi indicato di voler leggere un progresso dettagliato durante la sincronizzazione dei file (velocità di trasferimento, percentuale di completamento) tramite il comando --progress
, mentre aggiungendo --info=progress2
abbiamo chiesto al Terminale di mostrare anche una barra di avanzamento più completa in modo da poter vedere l’andamento complessivo del trasferimento, che è particolarmente utile quando vengono sincronizzati molti file.
Infine gli abbiamo detto di rimuovere i file dalla destinazione che non sono più presenti nella sorgente (--delete
), questo perché volevamo che la destinazione fosse una copia esatta della sorgente.
Esempio 2
Facciamo un altro esempio. Il comando:
rsync -xaEv --progress --info=progress2 --delete --relative --exclude='._*' "/percorso/sorgente/A/" "/Volumes/NOMEDISCO/B/"
è simile al precedente. Ci sono però alcune istruzioni in più, ovvero abbiamo anche deciso di:
- mantenere la struttura relativa delle directory (
--relative
) perché stiamo sincronizzando una sottodirectory all’interno di una cartella più grande e questo comando ci permette di preservare la stessa struttura di cartelle anche nella destinazione; - impedire la copia dei file che iniziano per
._
, ovvero tutti i metadati creati da macOS per la gestione su file system non-Apple. Siccome non abbiamo interesse a leggere i metadati su Windows o Linux, con--exclude='._*'
ci evitiamo di perdere tempo con la copia di file del tutto inutili.
Eseguendo questo comando quindi tutta la cartella A e relative sottocartelle viene copiata all’interno della cartella chiamata B che, come si legge dal comando, si trova in un disco esterno (Volumes
) chiamato NOMEDISCO
.
Esempio 3
Ancora un esempio. Questa volta diamo un occhiata al comando:
rsync -xaEv --progress --info=progress2 --delete --relative --include='*/' --include='*.txt' --include='*.pdf' --include='*.jpg' --include='*.md' --exclude='*' "/Users/NOMEUTENTE/Documents/A/cartella1/" "/Users/NOMEUTENTE/Documents/A/cartella2/" "/Users/NOMEUTENTE/Documents/A/cartella3/" "/Volumes/NOMEDISCO/B/"
Stiamo praticamente usando rsync per fotocopiare soltanto i file con estensione .txt, .pdf, .jpg e .md presenti nelle cartelle 1, 2 e 3 all’interno della cartella chiamata “B” presente in un disco esterno. Quindi se nella cartella su Mac chiamata “A” ci sono altre cartelle o file di altro formato (ad esempio video, documenti o foto con estensione diversa), verranno ignorati.

Possibili errori da evitare con rsync
Usare rsync attraverso comandi scritti a mano ed eseguiti tramite Terminale, ormai lo avrete capito, significa avere il pieno controllo dei dati che si desiderano copiare.
Il sistema come avete visto è completamente personalizzabile e adattabile in base al contesto, ma bisogna prestare particolarmente attenzione al comando che si costruisce perché una opzione mancante o un carattere scritto in maniera sbagliata può trasformare questo sogno ad occhi aperti in un vero e proprio incubo.
il –delete
Questo perché se si usa ad esempio la sopracitata opzione --delete
i file nella destinazione che non esistono più nella sorgente vengano eliminati.
Se non si è sicuri di cosa c’è nella destinazione o se si commette un errore nell’ordine delle directory, si può facilmente cancellare più file di quelli previsti, ad esempio eliminando intere cartelle presenti nel disco di backup.
Per evitarlo può essere una buona idea creare appositamente una cartella dedicata al backup di rsync all’interno della destinazione. Se ad esempio stiamo eseguendo una copia di file in una chiavetta esterna chiamata “TEST”, anziché impostare "/Volumes/TEST/"
come destinazione è preferibile digitare "/Volumes/TEST/Backup"
. Così facendo tutti gli altri file e cartelle presenti nella chiavetta non saranno cancellati perché il backup verrà eseguito dentro quella cartella (se non esiste, la creerà automaticamente rsync).
Occhio all’ordine delle directory
Invertire le directory è un altro errore che porta irrimediabilmente alla perdita dei dati. Se nel comando si indica la destinazione (supponiamo un disco USB) al posto della sorgente praticamente anziché copiare dei dati su Mac in un volume esterno avverrà il contrario.
Immaginate ora cosa vuol dire questo se c’è anche il comando –delete: praticamente con un disco vuoto, anziché riversarvi al suo interno i dati verrà svuotata anche la sorgente.
Rischio sovrascrittura indesiderata dei file
Se non si utilizzano correttamente i comandi --exlude
, tutti i file e le cartelle indicati come sorgente verranno fotocopiati nella destinazione.
Esiste tuttavia un comando che può fare comodo nel caso in cui si debba recuperare una sovrascrittura indesiderata. Ci riferiamo all’opzione --backup
che si occupa appunto di conservare una copia dei file che vengono eliminati o sovrascritti durante l’esecuzione dell’rsync. Questa è la sua sintassi di base:
rsync --backup --backup-dir=/percorso/del/backup
In pratica --backup
fa in modo che i file sovrascritti o cancellati vengano salvati come backup, mentre attraverso il comando--backup-dir=/percorso/del/backup
specifichiamo la cartella dove questi file di backup devono essere archiviati. In questo modo abbiamo una cartella contenente tutte le modifiche avvenute durante l’esecuzione dell’rsync. Se poi tutto è andato secondo i piani, ovvero se tutti quei file andavano comunque sostituiti nella destinazione, allora sarà sufficiente cancellare la cartella di backup.
In alternativa alla cartella di backup si può utilizzare il comando --suffix
per aggiungere un suffisso ai file che verrebbero sovrascritti. Una possibile sintassi è:
rsync --backup --suffix=.bak
In questo modo i file che verrebbero sovrascritti o cancellati dalla destinazione saranno invece rinominati aggiungendo il suffisso .bak
(esempio un file di testo chiamato ciao.txt
da aggiornare o cancellare diventa invece semplicemente ciao.txt.bak
) e al loro fianco, col nome originale, sarà fotocopiata l’ultima versione.
Fate prima un –dry-run per ogni nuovo rsync!
Nel capitolo dedicato alle opzioni principali di rsync, non a caso, abbiamo indicato in fondo il comando --dry-run
. Al di là dei sopracitati --backup
e --suffix
è il comando che più di ogni altro vi consigliamo di utilizzare quando eseguite un nuovo rsync per la prima volta.
Questo perché, come già spiegato, permette di effettuare semplicemente una dimostrazione di quel che accade, senza andare a fotocopiare, sovrascrivere e cancellare davvero i dati. Grazie agli altri comandi come --verbose
e --progress
sarà così possibile leggere uno per uno tutti i movimenti dei dati direttamente nel Terminale, senza modificarli per davvero. Se poi tutto funziona a gonfie vele, si può procedere con l’esecuzione vera e propria del comando togliendo l’opzione --dry-run
.
Un ultimo appunto sulla durata di rsync
Tenete inoltre presente che la prima volta che eseguirete un rsync (supponiamo di aver preso un disco esterno vuoto da dedicare specificamente a questo tipo di backup) l’esecuzione potrebbe impiegare da pochi minuti a diverse ore in base al numero e al peso dei dati da fotocopiare.
Le successive esecuzioni saranno invece molto più rapide perché, come abbiamo già spiegato in un precedente capitolo, rsync si occupa soltanto di aggiungere i nuovi file e sostituire con l’ultima versione quelli che invece sono stati modificati, saltando completamente quelli che tra sorgente e destinazione risultano perfettamente identici.
Alcuni casi d’uso con rsync
Chi scrive usa rsync per eseguire specifici backup su diversi volumi esterni, ad esempio copiando:
- settimanalmente, i dati più importanti dislocati in diverse cartelle nel Mac all’interno di una microSD;
- giornalmente, tutti gli articoli pubblicati su Macitynet (scritti in formato Markdown) e gli altri documenti personali all’interno di una chiavetta USB;
- mensilmente, eseguendo una copia esatta del disco in un SSD esterno, e una copia esatta della cartella con tutti i dati personali in un altro disco.
In fondo si tratta soltanto di costruire il comando rsync per ogni specifico backup. Ma una volta creato, a meno di importanti stravolgimenti nel proprio sistema di archiviazione dei dati (ad esempio spostando o rinominando le cartelle), non andrà più modificato.
Consigli sulla gestione degli rsync
A quel punto per recuperarli facilmente le prossime volte potete salvarveli in un file di testo (magari appuntandovi per ciascuno una spiegazione di quello che fa) oppure, in maniera più Smart, creando una scorciatoia tramite aText che li richiama digitando specifiche parole chiave.
Sempre portandovi all’attenzione alcuni dei nostri esempi d’uso, quando vogliamo eseguire il backup giornaliero sulla microSD ci basta collegarla al Mac, aprire il Terminale e digitare bkpmicro
per richiamare quello specifico rsync, oppure con bkptotale
richiamiamo il comando dedicato alla copia esatta del nostro archivio. Schiacciando poi il tasto Invio
si avvia l’esecuzione del backup.
Abbiamo anche creato alcuni comandi rsync che copiano determinati dati nella cartella locale di Dropbox: in questo modo quando il Mac è connesso a internet questi file vengono sincronizzati con il nostro spazio cloud e diventano automaticamente accessibili anche da tutti gli altri dispositivi (smartphone, tablet, altri computer) che hanno l’accesso allo stesso account.
Per altro la gestione di questi ultimi rsync l’abbiamo affidata a cron, un altro strumento di sistema (quindi già integrato sui Mac) che permette di programmare l’esecuzione automatica di comandi come questi a intervalli specifici. Ma di questo vi parleremo in maniera approfondita in un altro articolo.
Altre guide…
Lo sapevate che su Macitynet trovate centinaia di altri tutorial su iPhone, iPad, ma anche su Mac e Apple Watch? Vi basta cliccare sul nome del dispositivo che vi interessa per sfogliarli tutti selezionando poi quelli che desiderate leggere.
Tutti i tutorial per iOS 17 e iOS 18 sono nelle sezioni dedicate ai rispettivi sistemi operativi e loro aggiornamenti.