Per assicurarti di non perdere alcun dato, ti consiglio vivamente di utilizzare un buon strumento di copia di file come FreeFileSync . È grafico, gratuito, gratuito e open source e multipiattaforma (Windows, Mac, Linux). Basta essere sicuri di non rovinare tutto e copiare all'indietro, eliminando tutto! Non è difficile da ottenere, tuttavia, poiché è grafico e molto intuitivo.
Se stai eseguendo la copia da Linux, puoi anche usare FreeFileSync ovviamente, ma se sei un guru della riga di comando ti potrebbe piacere di rsync
più. È uno strumento solo a riga di comando, più difficile da usare, ma comunque molto potente, anche se non altrettanto potente di FreeFileSync poiché non gestisce molto bene la sincronizzazione bidirezionale. Ecco alcuni dei miei rsync
comandi preferiti :
COPIA dalla sorgente alla destinazione, lasciando intatto tutto ciò che non è in conflitto:
sudo rsync -rah --stats --info=progress2 '/path/to/source' '/path/to/destination'
Facoltativamente, aggiungi --verbose
o semplicemente -v
(o -rahv
nel mio caso) per ottenere anche un elenco completo di ciò che verrà copiato.
Facoltativamente, aggiungere --dry-run
per mostrare ciò che sarebbe accaduto ma in realtà non ancora farlo.
Facoltativamente, puoi anche registrare l'intero elenco di file da copiare in un stdout.log
file come questo e qualsiasi errore in un stderr.log
file come questo. Qui rimuovo l'indicatore di avanzamento rimuovendolo --info=progress2
, solo così i file di registro non vengono inquinati con le informazioni sullo stato ovunque:
(sudo rsync -rah --verbose --dry-run --stats '/path/to/source' '/path/to/destination' | tee -a '/path/to/stdout.log') 3>&1 1>&2 2>&3 | tee -a '/path/to/stderr.log'
Rimuovi --dry-run
da quanto sopra quando sei pronto per effettuare effettivamente la copia. Assicurati di rivedere la stampa del paragrafo stats (che hai stampato perché avevi --stats
) alla fine del file stdout.log prima di eseguire lo script per davvero, per assicurarti che tutto appaia bene.
Ecco un esempio di --stats
output ottenuto eseguendo l'opzione MIRROR di seguito. Si noti che sta eliminando alcuni file. Prestare attenzione a ciò, poiché non è possibile annullare l'eliminazione dei file (almeno non senza speciali strumenti di recupero del software). Tieni presente che li sta eliminando definitivamente , NON li sta inviando a una sorta di cestino o qualcosa del genere, quindi fai attenzione!
Numero di file: 102.033 (reg: 89.638, dir: 9.867, collegamento: 2.502, speciale: 26)
Numero di file creati: 3 (reg: 3)
Numero di file cancellati: 9.861 (reg: 9.360, dir: 474, collegamento: 27)
Numero di file regolari trasferiti: 25
Dimensione totale del file: 8.12G byte Dimensione
totale del file trasferito: 35.30M byte
Dati letterali: 35.30M byte
Dati corrispondenti: 0 byte
Dimensione dell'elenco file: 917.43K
Tempo di generazione dell'elenco file : 0.007 secondi
Elenco file tempo di trasferimento: 0.000 secondi
Byte totali inviati: 38.33M
Byte totali ricevuti: 1.02M
inviato 38,33 M byte ricevuto 1,02 M byte 7,15 M byte / sec
dimensione totale è 8,12 G speedup è 206,37
A SPECCHIO dalla sorgente alla destinazione, il che significa anche eliminare qualsiasi cosa nella destinazione che non sia nella fonte (nota la riga "Numero di file eliminati" nell'output delle statistiche mostrato sopra), aggiungi --delete --delete-excluded
(anche se non stiamo ancora escludendo nulla, una volta che conosci la --exclude=PATTERN
sintassi ti accorgerai anche che vuoi la --delete-excluded
bandiera).
Innanzitutto, la versione sicura a secco:
(sudo rsync -rah --verbose --dry-run --stats --delete --delete-excluded '/path/to/source' '/path/to/destination' | tee -a '/path/to/stdout.log') 3>&1 1>&2 2>&3 | tee -a '/path/to/stderr.log'
E ora il pericolo pericolo pericolo - potrebbe eliminare tutto se si fa la versione all'indietro di origine e destinazione (quindi controllare l'output delle statistiche alla fine di stdout.log prima di continuare):
(sudo rsync -rah --verbose --stats --delete --delete-excluded '/path/to/source' '/path/to/destination' | tee -a '/path/to/stdout.log') 3>&1 1>&2 2>&3 | tee -a '/path/to/stderr.log'
E ora la versione che non viene salvata in nessun file di registro nel caso in cui si desideri solo vedere l'avanzamento in tempo reale e il paragrafo delle statistiche alla fine, ma NON avere un registro dei singoli file copiato o eliminato in stdout.log, o errori stampati in stderr.log:
sudo rsync -rah --info=progress2 --stats --delete --delete-excluded '/path/to/source' '/path/to/destination'
E questo è solo l'inizio di rsync. Leggi il manuale: man rsync
oppure online: https://linux.die.net/man/1/rsync e tieni presente che puoi combinare e abbinare molte delle opzioni che ho mostrato sopra. Altre cose davvero utili da esaminare includono la configurazione di un file source.txt e di un file exclude.txt , per includere ed escludere, rispettivamente, elenchi di file e percorsi. Fallo con l'opzione --files-from='/path/to/source.txt'
e --exclude-from='/path/to/exclude.txt'
, rispettivamente. Questo è estremamente utile. Infine, questo va molto bene con l' --relative
opzione. Alla fine, uno script Bash completo potrebbe assomigliare a questo:
(sudo rsync $OPTIONS $SRC $DEST | tee -a $LOG_STDOUT) 3>&1 1>&2 2>&3 | tee -a $LOG_STDERR
Dove $ SRC è il percorso di origine (in questo caso, un percorso relativo per tutti i file nel file source.txt , ad esempio semplicemente /
per rendere tutto relativo alla directory principale), $ DEST è il percorso di destinazione, $ LOG_STDOUT è il percorso dove vuoi registrare le tue informazioni stdout, $ LOG_STDERR è il tuo percorso verso dove vuoi registrare le tue informazioni stderr e $ OPTIONS potrebbe assomigliare a questo:
-rah --verbose --stats --relative --info=progress2 --delete --delete-excluded --dry-run --files-from='/path/to/source.txt' --exclude-from='/path/to/exclude.txt'
E, naturalmente, come si è detto, si potrebbe desiderare di rimuovere --verbose
, --relative
, --info=progress2
, --delete
e --delete-excluded
, e --dry-run
, se lo desideri, a seconda di quello che stai facendo.