RSYNC è uno strumento di sincronizzazione dei file molto potente ed efficiente. Funziona copiando solo i pezzi di file che sono cambiati, invece di copiare l’intero file ogni volta. Questi cambiamenti possono essere sia aggiunte di nuove informazioni, che modifiche a informazioni esistenti.
Se vuoi usare RSYNC per copiare file senza sovrascriverli, puoi usare l’opzione “-u” o “—update”. Secondo il manuale di RSYNC, questa opzione dice a RSYNC di “saltare i file che sono più recenti sulla destinazione”.
Ecco un esempio di come si potrebbe fare:
```
rsync -avu /percorso/sorgente/ /percorso/destinazione/
```
In questo comando:
- “-a” significa “archivio”, che copia i file in modalità ricorsiva e conserva i timestamp dei file e le autorizzazioni
- “-v” significa “verbose”, che fa sì che RSYNC stampi di più su quello che sta facendo
- “-u” è l’opzione chiave qui, che dice a RSYNC di non sovrascrivere i file più nuovi sulla destinazione
Ricorda che RSYNC usa il timestamp e la dimensione di un file per determinare se il file è cambiato o no. Quindi, se un file sulla destinazione ha lo stesso timestamp e la stessa dimensione di un file sulla sorgente, RSYNC assumerà che il file non sia cambiato e non lo copierà.
Se vuoi che RSYNC copi solo i file che non esistono affatto sulla destinazione, potrebbe essere necessario un approccio leggermente differente. Potresti utilizzare un elenco di esclusione per escludere tutti i file che esistono già nella destinazione.
Ecco un esempio di come potresti fare:
```
rsync -av —exclude-from=/percorso/lista-esclusione.txt /percorso/sorgente/ /percorso/destinazione/
```
In questo comando, —exclude-from dice a RSYNC di leggere un elenco di schemi di file da escludere da un file. Ogni linea di questo file è un modello che corrisponde ai file da escludere.
Per ottenere un elenco di tutti i file nella destinazione che dovresti escludere, potresti usare un comando come questo:
```
find /percorso/destinazione/ -type f -exec basename {} \; > /percorso/lista-esclusione.txt
```
Questo comando trova tutti i file nella directory di destinazione, ottiene il nome del file senza il percorso con basename, e poi scrive questi nomi di file in lista-esclusione.txt.
Ricorda, tuttavia, che RSYNC è uno strumento potente e puoi fare molte cose diverse con esso. Ho cercato di rendere queste istruzioni il più generale possibile, ma potresti dover adattare questi comandi alle tue specifiche esigenze.
Sorgenti:
- Informazione sull’opzione “-u” di RSYNC dal suo manuale (https://linux.die.net/man/1/rsync)
- Post del blog su come escludere i file con RSYNC (https://www.tecmint.com/rsync-local-remote-file-synchronization-commands/)
- Articolo su find e basename (https://www.howtoforge.com/linux-basename-command/)