1 23/04/2026 3 min

Perché rsync resta lo strumento giusto per sincronizzare directory

Quando devi allineare directory locali o remote, rsync è ancora uno degli strumenti più solidi in Linux: trasferisce solo le differenze, preserva metadati utili e si presta bene sia ai backup sia alle repliche operative. Il suo punto forte non è “copiare file”, ma farlo in modo controllabile, verificabile e ripetibile. Se usato con criterio, riduce traffico, tempi di trasferimento e sorprese.

La differenza rispetto a un semplice cp è concreta: rsync confronta sorgente e destinazione, decide cosa aggiornare e può anche eliminare ciò che non esiste più lato sorgente. Questo lo rende adatto a scenari diversi, dalla sincronizzazione di una directory di lavoro alla replica di contenuti web verso un server remoto. Il rovescio della medaglia è che alcune opzioni sono potenti al punto da diventare pericolose se usate senza test.

La regola pratica è semplice: prima osservi, poi sincronizzi, poi eventualmente automatizzi. Il comando giusto dipende da tre variabili: direzione del flusso, tipo di metadati da preservare e livello di rischio accettabile sul target.

Il modello mentale: sorgente, destinazione e semantica della barra finale

La sintassi base è lineare:

rsync [opzioni] sorgente destinazione

Il dettaglio che crea più errori è la barra finale. /path/dir e /path/dir/ non significano la stessa cosa quando la destinazione esiste già. In pratica, la barra sulla sorgente indica spesso “copia il contenuto della directory”, non la directory come contenitore. È una distinzione piccola solo in apparenza, perché cambia la struttura finale.

Esempio classico: se vuoi sincronizzare il contenuto di /srv/site/ dentro /backup/site/, la forma corretta è quella con slash finale sulla sorgente. Se invece vuoi ottenere una copia annidata della directory stessa, togli lo slash. Prima di lanciare un --delete, questa differenza va capita bene: è il tipo di dettaglio che evita cancellazioni involontarie.

Sincronizzazione locale: il caso più semplice da fare bene

Per una copia locale affidabile, parti con un dry-run. Il dry-run mostra cosa verrebbe fatto senza toccare i file. È il modo migliore per verificare inclusioni, esclusioni e direzione del flusso.

rsync -avhn --delete /home/app/data/ /mnt/backup/app-data/

Qui:

  • -a abilita la modalità archivio, che preserva permessi, timestamp, link simbolici e buona parte dei metadati utili.
  • -v aumenta il dettaglio dell’output.
  • -h rende le dimensioni leggibili.
  • -n simula l’operazione senza modificarla.
  • --delete rimuove dalla destinazione ciò che non esiste più nella sorgente.

Per una prima validazione, cerca tre segnali: file che devono essere copiati, file che devono essere ignorati e file che verrebbero cancellati. Se il dry-run mostra cancellazioni inattese, non è rsync “che sbaglia”: è quasi sempre un problema di path, slash finale o filtro.

Una volta verificato il piano, togli -n e rilancia. Se la directory contiene molti file piccoli, la CPU può diventare più rilevante del traffico di rete; se invece ci sono pochi file grandi, il collo di bottiglia si sposta verso I/O e banda. In entrambi i casi, rsync evita di ritrasferire ciò che non è cambiato, quindi il vantaggio cresce con il numero di sincronizzazioni ripetute.

Sincronizzare verso un host remoto via SSH

Per il caso remoto, la scelta standard è SSH. È la strada giusta nella maggior parte degli ambienti perché non richiede servizi aggiuntivi esposti e si appoggia a un canale già cifrato. La forma più comune è questa:

rsync -avh -e ssh /var/www/html/ user@server:/var/www/html/

Il parametro -e ssh dice a rsync di usare SSH come trasporto. Su molte macchine basta anche ometterlo, ma esplicitarlo rende il comando più leggibile, soprattutto quando devi passare opzioni SSH aggiuntive.

Se il server remoto ascolta su una porta non standard o richiede una chiave specifica, conviene dichiararlo subito. Per esempio:

rsync -avh -e