Comando rsync in Linux: sincronizzare file con anteprima e percorsi corretti
rsync copia file e aggiorna directory tra posizioni locali o remote, trasferendo gli elementi selezionati come cambiati. Prima di applicare una sincronizzazione, controlla origine, destinazione e risultato di --dry-run: un percorso sbagliato o l'opzione --delete possono causare perdita di dati.
Per impostazione predefinita rsync seleziona i file confrontando dimensione e orario di modifica. La modalità archivio -a combina copia ricorsiva e conservazione di vari attributi. Lo slash finale dell'origine è decisivo: con source/ copi il contenuto della directory; senza slash copi la directory per nome, secondo il contesto della destinazione.
Sintassi e preparazione
rsync [options] source destination
source è l'origine e destination la destinazione. Controlla la versione con rsync --version e le opzioni locali con man rsync. Gli esempi usano directory relative alla posizione corrente: verifica dove ti trovi, prepara le directory padre necessarie e controlla spazio e permessi prima di iniziare.
Per il trasferimento tramite shell remota usa utente@host:percorso. Servono normalmente rsync su entrambi i sistemi, un account autorizzato e un collegamento SSH funzionante. Verifica la chiave host del server come nella guida al comando ssh. Un indirizzo con due punti doppi o con schema rsync:// indica invece la modalità daemon: non presumere che abbia la cifratura del trasporto SSH.
Esempi: anteprima, copia locale e invio remoto
Anteprima prima delle modifiche. Per aggiornare backup/project/ con il contenuto di project/, inizia così:
rsync -av --dry-run project/ backup/project/
Leggi i nomi elencati e verifica che corrispondano al progetto e alla destinazione previsti. -v rende l'output più descrittivo; per distinguere le modifiche ai singoli attributi puoi aggiungere --itemize-changes. L'anteprima non trasferisce i dati e non dimostra che la copia reale avrà spazio e permessi sufficienti per concludersi.
Copia locale. Dopo avere verificato l'anteprima, rimuovi soltanto --dry-run, mantenendo percorsi e altre opzioni:
rsync -av project/ backup/project/
Il contenuto di project/ viene aggiornato in backup/project/. Questi esempi non usano --delete: eventuali file presenti solo nella destinazione non vengono eliminati per il solo fatto di mancare nell'origine. Un file di destinazione selezionato per l'aggiornamento può comunque essere sostituito.
Invio tramite SSH. Sostituisci account e host illustrativi con quelli reali e verifica prima il percorso remoto:
rsync -av project/ alice@server.example.com:/home/alice/project/
L'origine è locale e la destinazione è remota. Esegui anche qui un'anteprima aggiungendo --dry-run prima della copia effettiva. Se SSH usa una porta particolare, specifica per esempio -e 'ssh -p 2222'; è la porta della connessione SSH, non quella del daemon rsync.
Slash finale e interpretazione dell'anteprima
Considera una directory source/ che contiene notes.txt e una directory di destinazione backup/ già esistente, priva di quel file:
rsync -av --dry-run source/ backup/
Estratto illustrativo dell'output, non risultato misurato sul tuo sistema:
sending incremental file list
notes.txt
La copia pianificata è backup/notes.txt, perché lo slash finale di source/ seleziona il contenuto. Nello stesso contesto, con la directory backup/ già esistente, source senza slash produce invece backup/source/notes.txt. Per osservare la differenza, confronta le due forme mantenendo --dry-run; non occorre applicare la copia.
Non generalizzare questa regola senza considerare se la destinazione esiste e se stai copiando un singolo file o una directory. Leggi sempre i percorsi completi. L'anteprima descrive lo stato osservato in quel momento: modifiche successive ai file o errori durante l'esecuzione possono cambiare l'esito.
Il confronto predefinito di dimensione e orario non legge ogni volta tutto il contenuto per stabilire se un file sia cambiato. L'opzione --checksum cambia quel criterio e richiede ulteriori letture su disco. Questo controllo prima del trasferimento è distinto dalla verifica che rsync esegue normalmente sui file trasferiti; non sono la stessa operazione.
Opzioni principali e metadati
| Opzione | Funzione |
|---|---|
-a |
Modalità archivio: combina ricorsione e conservazione di vari attributi; non include ogni metadato. |
-v |
Mostra informazioni più dettagliate sulle operazioni. |
-n, --dry-run |
Mostra un'anteprima senza applicare le modifiche pianificate. |
--delete |
Elimina dalla destinazione gli elementi estranei all'origine nelle directory sincronizzate, secondo le regole di filtro. |
--exclude=pattern |
Esclude gli elementi che corrispondono al modello indicato. |
-e 'ssh -p porta' |
Imposta il comando della shell remota e la porta SSH. |
Nelle forme mostrate, -a corrisponde a -rlptgoD: include ricorsione, collegamenti simbolici e vari attributi quali permessi e orari. La conservazione effettiva dipende da privilegi e filesystem. Non include automaticamente ACL (liste di controllo degli accessi), attributi estesi o relazioni tra hard link: valuta rispettivamente -A, -X e -H se necessari e supportati. Non aggiungerli soltanto per presumere un backup completo.
Cancellazioni, filtri e verifica del ripristino
--delete opera sul lato che riceve e soltanto nell'ambito delle directory sincronizzate. Prima di usarlo, ricontrolla la direzione, lo slash finale e le regole di esclusione; aggiungi --dry-run alla stessa combinazione completa e leggi tutte le cancellazioni previste. Non assumere che una directory chiamata backup contenga solo dati sacrificabili.
Una normale esclusione protegge anche dalla cancellazione l'elemento corrispondente nella destinazione, ma opzioni come --delete-excluded o filtri validi soltanto sul lato mittente cambiano questa protezione. Inoltre source/* non equivale a richiedere l'intera directory: l'espansione della shell modifica ciò che rsync riceve. Non sostituire i percorsi alla cieca quando usi opzioni di cancellazione.
Dopo la copia controlla lo stato di uscita e gli eventuali errori; confronta file importanti, dimensioni e, quando serve, hash del contenuto. Un conteggio uguale non garantisce file identici. Conserva versioni o copie indipendenti dei dati importanti: una sincronizzazione può propagare errori e corruzione presenti nell'origine.
Prova anche il ripristino in una directory separata, senza sovrascrivere l'originale: verifica che i file si aprano e che attributi e applicazioni necessari funzionino. Le guide in inglese su backup tar e verifica del ripristino e su backup del server e controlli indipendenti approfondiscono questi aspetti nel loro contesto.
Domande frequenti
Qual è la differenza tra source e source/?
Con una directory backup/ già esistente, source/ copia il contenuto al suo interno, mentre source crea il livello source nella destinazione. Controlla l'anteprima mantenendo identici tutti gli altri parametri.
Ogni aggiornamento usa sempre un trasferimento delle sole differenze?
La selezione dei file e il modo di trasferirne il contenuto sono distinti. Rsync può usare un algoritmo a differenze per ridurre il traffico, ma per copie indicate come locali usa normalmente il trasferimento dell'intero file selezionato. Non dedurre dalla parola sincronizzazione che ogni operazione legga o scriva soltanto pochi byte.
Documentazione ufficiale
Il manuale ufficiale di rsync descrive sintassi dei percorsi, modalità archivio, anteprima, filtri e cancellazioni. Confronta sempre queste indicazioni con la versione installata e con le funzioni supportate dai due sistemi.




