10 esempi utili del comando Linux rsync
Pubblicato: 2022-10-28 Il comando Linux rsync
è un potente strumento per la copia di file e la sincronizzazione delle cartelle. Ecco dieci casi d'uso comuni che potrai sfruttare al meglio sui tuoi sistemi.
Lo strumento di sincronizzazione
Lo strumento rsync
copia file e directory tra due computer. Utilizza un sofisticato algoritmo che esegue la scansione degli alberi di directory per trovare i file sul computer di origine che non esistono sul computer di destinazione. Questi file vengono trasmessi al computer di destinazione. Ciò che rende rync
così intelligente è che può capire quali parti di file esistenti sono state modificate e invia solo le parti modificate .
È possibile utilizzare rsync
per copiare i file in una posizione diversa sul disco rigido, in un disco rigido diverso nello stesso computer, in un'unità USB collegata esternamente o in qualsiasi altra posizione accessibile dalla rete.
Inoltre, rsync
può facoltativamente preservare collegamenti simbolici, collegamenti reali e metadati di file come proprietà del file, autorizzazioni e tempi di accesso. Per supportare tutte queste funzionalità, rsync
ha molte opzioni e capirle tutte richiede tempo. Abbiamo raccolto questi 10 esempi per aiutarti a iniziare. Abbiamo già scritto sull'esecuzione di backup con rsync
, quindi qui ci stiamo concentrando su altri usi.
Nonostante tutte le sue numerose opzioni, la struttura di un comando rsync
è semplice. Dobbiamo fornire la fonte, la destinazione e le opzioni che vogliamo utilizzare. Probabilmente scoprirai che rsync
è già installato sul tuo computer Linux - lo era, su tutte le nostre macchine di prova - ma se non lo è sarà sicuramente nei repository della tua distribuzione.
1. Copia i file in una directory diversa
Ecco un semplice esempio per farci andare avanti. Copieremo i file dalla directory "file-progetto" alla directory "Documenti". Stiamo usando due opzioni, l'opzione -a
(archivio) e l'opzione -v
(dettagliata). L'opzione dettagliata dice a rsync
di spiegare cosa sta facendo mentre lo fa. L'opzione archive
preserva la proprietà del file e alcuni altri elementi che esamineremo a breve.
Il formato del comando è options source-location destination-location
.
rsync -av /home/dave/file-di-progetto/ /home/dave/Documents/
L'utilizzo di ls
nella cartella "Documenti" mostra che i file sono stati copiati.
Mentre rsync
funziona, i file vengono elencati mentre vengono copiati. Ci viene detto:
- Il numero di byte inviati.
- Il numero di byte ricevuti. Prima che avvenga il trasferimento di file,
rsync
deve capire quali file devono essere trasferiti. Per fare ciò, alcune informazioni sui file nella destinazione devono essere recuperate darsync
. Queste informazioni sono contenute nei byte ricevuti. - La velocità del trasferimento.
- La dimensione totale dei file copiati.
- La "accelerazione". Questo è il rapporto tra la dimensione totale divisa per la somma dei byte inviati e ricevuti. Più alto è questo numero, più efficiente sarà il trasferimento.
Abbiamo modificato il file di testo nella directory di origine e ripetuto il comando rsync
.
rsync -av /home/dave/file-di-progetto/ /home/dave/Documents/
Questa volta l'unico file che deve essere aggiornato è il file di testo che abbiamo modificato. La cifra dell'accelerazione è ora 30.850. Questo è quanto è molto più efficiente copiare la parte modificata di quel singolo file, piuttosto che copiare tutti i file.
L'opzione -a
(archivio) rappresenta in realtà una raccolta di altre opzioni. È come usare tutte queste opzioni:
- r : lavora ricorsivamente attraverso gli alberi di directory nella directory di origine e copiali nella directory di destinazione, creandoli se non esistono già lì.
- l : copia i collegamenti simbolici come collegamenti simbolici.
- p : conserva i permessi dei file.
- t : Conserva i tempi di modifica dei file.
- g : conserva le autorizzazioni di gruppo.
- o : conserva la proprietà del file.
- D : Copia file speciali e file del dispositivo. I file speciali possono essere elementi incentrati sulla comunicazione trattati come file, come socket e pipe first-in, first-out (fifos). I file di dispositivo sono file speciali che forniscono l'accesso a dispositivi e pseudo-dispositivi.
Questa è una combinazione così usata di frequente che rsync
fornisce l'opzione -a
(archive) come un modo abbreviato per invocarle tutte.
2. Copiare una directory in una directory diversa
Se guardi il precedente comando rsync
vedrai una barra finale "/" sul percorso del file della directory di origine. Questo è significativo. Dice a rsync
di copiare il contenuto della directory. Se non fornisci la barra finale, rsync
copierà la directory e il suo contenuto.
rsync -av /home/dave/file-di-progetto /home/dave/Documents/
Questa volta il nome della directory viene aggiunto al nome del file man mano che vengono elencati. Se guardiamo all'interno della directory di destinazione, vedremo che la cartella di origine è stata copiata con i file al suo interno.
ls documenti/
ls Documenti/file-progetto/
3. Copiare una directory su un'unità diversa
La copia di file in un'altra posizione sullo stesso disco rigido non offre protezione contro un guasto dell'unità. Se quell'unità rinuncia al fantasma, hai perso le copie di origine e destinazione di quei file. Copiarli su un altro disco rigido è un modo molto più robusto per proteggere i tuoi dati. Tutto ciò che dobbiamo fare è fornire il percorso corretto per l'unità di destinazione.
rsync -av /home/dave/project-files /run/mount/drive2
Guardare l'altro disco rigido ci mostra che la directory e i file sono stati copiati su di esso.
ls run/mount/drive2/project-files/
CORRELATI: Cosa fare quando il disco rigido si guasta
4. Fare prima una corsa a secco
Prima di esaminare come rsync
può eliminare i file in modo utile per noi, diamo un'occhiata a come possiamo fare in modo che rsync
esegua un ciclo di prova.
In una corsa a vuoto, rsync
esegue i movimenti per eseguire le azioni che abbiamo chiesto, ma in realtà non le esegue. Riporta cosa sarebbe successo se il comando fosse stato eseguito. In questo modo, possiamo assicurarci che il comando esegua esattamente ciò che ci aspettiamo.
Per forzare una corsa a secco usiamo l' --dry-run
.
rsync -av --dry-run /home/dave/geocoder /run/mount/drive2
I file che sarebbero stati copiati vengono elencati per noi e otteniamo le solite statistiche, seguite dal messaggio (DRY RUN)
in modo che sappiamo che non è successo nulla.
5. Eliminazione di file nella directory di destinazione
L'opzione --delete
dice a rsync
di eliminare i file e le directory nella directory di destinazione che non si trovano nella directory di origine. Ciò significa che la directory di destinazione sarà una copia esatta della directory di origine. Saremo prudenti e useremo prima l' --dry-run
.
rsync -av --delete --dry-run /home/dave/geocoder /run/mount/drive2
Siamo informati che due file verranno eliminati. Se siamo sicuri che non ci interessa che verranno eliminati, possiamo rimuovere l' --dry-run
ed eseguire il comando sul serio.
rsync -av --delete /home/dave/geocoder /run/mount/drive2
Questa volta i contenuti delle directory vengono sincronizzati e i due file extra vengono eliminati.
6. Eliminazione dei file di origine
Puoi scegliere di eliminare i file di origine dopo un trasferimento riuscito , facendo in modo che rsync
funzioni più come una mossa che come una copia. Se il trasferimento non è andato a buon fine, i file di origine non vengono eliminati. L'opzione che dobbiamo usare è --remove-source-files
.
rsync -av --remove-source-files /home/dave/geocoder /run/mount/drive2
Si noti che i file possono essere eliminati anche se non vengono trasferiti file. Questo perché se rsync
verifica e tutti i file sono già nella directory di destinazione e non c'è nulla da fare per rsync
, rsync
considera che un trasferimento riuscito.
Inoltre, rsync
elimina solo i file dalla directory di origine. Non elimina la directory di origine né le sottodirectory, ma solo i file in esse contenuti. Possiamo vederlo usando l'opzione -R
(ricorsiva) con ls
, nella directory di origine.
geocodificatore ls -R
7. Copia i file su un computer remoto
Per sincronizzare le cartelle con un computer remoto, rsync
deve essere installato su entrambi i computer. Configurare la comunicazione SSH tra i due computer prima di provare a utilizzare rsync
sul computer remoto.
È necessario essere in grado di accedere in remoto come utente normale sul computer remoto affinché rsync
funzioni. Non importa se utilizzi un ID e una password per accedere o se hai configurato chiavi SSH per un accesso sicuro senza password, ma se non riesci ad accedere come utente, rsync
non funzionerà o.
Se accedi con una password, rsync
ti chiederà la password. Se usi le chiavi SSH per accedere, il processo è senza soluzione di continuità.
L'unica cosa in più che devi fare è aggiungere il nome dell'account utente e l'indirizzo IP del computer remoto all'inizio del percorso del file di destinazione. Utilizzare un segno " @
" per separare il nome utente dal nome del computer o dall'indirizzo IP e i due punti " :
" per separare il nome del computer o l'indirizzo IP dal percorso della directory.
Sulla nostra rete di prova, questi due comandi sono equivalenti.
rsync -av /home/dave/geocoder [email protected]:/home/dave/Downloads
rsync -av /home/dave/geocoder [email protected]:/home/dave/Downloads
Riceviamo le stesse informazioni che ci vengono segnalate quando copiamo i file in locale.
8. Includere o escludere file o directory
È possibile che nella directory di origine siano presenti file e directory che non si desidera copiare sul computer di destinazione. Puoi escluderli usando l'opzione --exclude
. In modo simile, puoi scegliere di includere file e directory specifici con l'opzione --include
.
La stranezza è che se usi l'opzione --include
da sola, tutti i file vengono copiati, come di consueto, compresi i file specificatamente inclusi. Per copiare solo i file inclusi devi --exclude
tutto il resto.
Puoi usare tutte le opzioni --include
e --exclude
nel comando che desideri, ma assicurati di mettere le opzioni --include
prima delle opzioni --exclude
. Inoltre, assicurati di avere una barra finale nel percorso del file di origine.
Questo comando copia solo i file di codice sorgente C e i file di dati CSV sul computer di destinazione.
rsync -av --include="*.c" --include="*.csv" --exclude="*" /home/dave/geocoder/ /run/mount/drive2/geocoder
Gli unici file copiati sono quelli che abbiamo incluso in modo specifico.
9. Comprimi i file in trasferimento
L'opzione -z
(comprimi) fa in modo che rsync
comprima i file trasferiti. Tuttavia, non vengono archiviati come file compressi sul computer di destinazione, vengono compressi solo durante il trasferimento stesso. Questo può velocizzare lunghi trasferimenti.
rsync -avz /home/dave/geocoder /run/mount/drive2
10. Monitoraggio dei progressi
A proposito di trasferimenti lunghi, possiamo aggiungere alcune statistiche in modo da poter vedere l'andamento del trasferimento.
L'opzione -P
(parziale, progresso) aggiunge in realtà due opzioni, --partial
e --progress
. L'opzione --partial
dice a rsync
di mantenere i file parzialmente trasferiti se un trasferimento fallisce. Ciò consente di risparmiare tempo al riavvio del trasferimento.
L'opzione --progress
stampa, per ogni file, i dati trasferiti in byte e in percentuale, la velocità del trasferimento, il tempo impiegato, il numero del file da trasferire e il conteggio dei file rimanenti.
rsync -aP /home/dave/geocoder /run/mount/drive2
L'output scorre abbastanza rapidamente ed è difficile da leggere. Puoi migliorare leggermente le cose rimuovendo l'opzione -v
(dettagliata) dal comando. Anche allora è ancora difficile da leggere mentre sfreccia.
Spesso è più utile monitorare l'andamento del trasferimento complessivo. Puoi farlo con l'opzione –info e passandolo "progress2" come parametro.
sync -a --info=progress2 /home/dave/geocoder /run/mount/drive2
Questo fornisce un rapporto sullo stato di avanzamento che è effettivamente utile.
Come cp sugli steroidi
Il comando rsync
è veloce, flessibile e vale il tempo necessario per familiarizzare con esso. La forma base di un comando rsync
con le opzioni -av
, la directory di origine e la directory di destinazione non è affatto difficile da ricordare.
Per molti casi d'uso, questo è tutto ciò di cui hai bisogno. Mettiti comodo e il resto verrà facilmente.
CORRELATI: Guida per non principianti alla sincronizzazione dei dati con Rsync