Linux: sincronizzare due cartelle con rsync

  5 minuti

Come sincronizzare il contenuto di due cartelle locali o remote con il semplice comando rsync

Icona di Linux con sotto il titolo dell'articolo

Spesso nelle operazioni sistemistiche ci si trova nella condizione di dover sincronizzare una cartella con un'altra, in modo da aggiornare il contenuto della cartella di destinazione. Ad esempio quando si sviluppa su web solitamente le modifiche avvengono prima in locale, per poi essere pubblicate nel server remoto. Il comando rsync permette di effettuare queste operazioni in tempi rapidissimi e con una sintassi molto chiara e concisa. Per chi fa uso massivo del terminale ogni giorno questo comando può veramente salvare una montagna di tempo.

Che cos'è rsync

Si tratta di uno strumento di copia veloce e versatile che permette di copiare da una cartella sorgente remota o locale a una cartella destinazione remota o locale. Offre un numero di opzioni molto ampie, che lo rendono uno strumento molto flessibile per ogni caso d'uso. È un comando molto usato per effettuare backupmirroring e qulsiasi operazione di copia da eseguire ogni giorno.

Sincronizzare una cartella locale con una cartella remota

Si immagini di sviluppare un sito web su apache, presente nella cartella locale /var/www/html/website.  Il sito web in produzione è presente in un server con indirizzo 192.168.0.80.  È stato precedentemente creato un accesso SSH al server con utente user. La cartella del sito in produzione è pubblicata nello stesso percorso della cartella locale. A questo punto per sincronizzare le due cartelle il comando è il seguente:

rsync -avz /var/www/html/website/ user@192.168.0.80:/var/www/html/website

Il comando prende due parametri e tre opzioni. Le opzioni (o flag) sono le seguenti:

  • -a o --archive: modalità archivio, ovvero comprende automaticamente tutti i seguenti parametri:

    • -r, --recursive scorre riscorsivamente tutti i file e le directory a partire dal percorso sorgente

    • -l, --links copia e mantiene i link simbolici

    • -p, --perms preserva i permessi

    • -t, --times preserva la data e ora di modifica dei file

    • -g, --group preserva i gruppi

    • -o, --owner preserva i proprietari

    • -D, lo stesso di --devices e --specials

    • --devices preserva i device file

    • --specials preserva i file special

  • -v o --verbose, incrementa la verbosità del comando, ovvero i messaggi sulla console

  • -z o --compress: comprime i dati durante il trasferimento 

I parametri invece sono due: la cartella sorgente e la cartella di destinazione. È importante notare lo slash alla fine del primo parametro e la sua mancanza alla fine del secondo. Questo significa letteralmente: "sincronizza il contenuto della cartella sorgente sulla cartella destinazione".

La sincronizzazione verifica le differenze tra i singoli file ed effettua una sovrascrizione solo nel momento in cui i due file differiscono. Questo permette di risparmiare una considerevole quantità di tempo in quanto vengono trasferiti solamente i cambiamenti effettuati. Onde evitare errori è fortemente consigliato vedere cosa viene sovrascritto senza attuare modifiche. Per fare ciò è necessario un ulteriore parametro: 

  • -n o --dry-run, esegue un test senza effettuare modifiche

Conclusioni

rsync è un comando di grande utilità, molto semplice da imparare e da usare e che si presta a moltissimi scenari. Nel mondo Linux è fondamentale sapersi destreggiare con la linea di comando e nel bagaglio di ogni programmatore non può mancare la conoscenza di questo strumento.

Condividi l'articolo

Rimani aggiornato

Iscriviti alla nostra newsletter di TouchMultimedia per rimanere sempre aggiornato sui nostri articoli e sulle ultime novità.

Touch Multimedia

Codice fiscale e registro imprese 02782060244 VI
Capitale Sociale Euro 52.000,00
R.E.A. Vicenza 274016

Dove siamo

Touch Multimedia S.R.L.
Via Dei Molini, 3B
Sarcedo (VI)
36030

Tel. +39 0445 366583
Fax. +39 0445 366583

info@touchmultimedia.com

Resta in contatto

Bandiera italiana
Bandiera inglese