10 Comando Linux rsync per escludere file/directory
Rsync (Remote Sync) è un comando più comunemente utilizzato per copiare e sincronizzare file e directory in remoto e localmente nei sistemi Linux/Unix. Con il comando rsync, puoi copiare e sincronizzare i dati in remoto e localmente tra directory, dischi e reti, eseguire backup dei dati e mirroring tra due macchine Linux.
Rsync è una delle utility più utili per un amministratore di server, ma sincronizza tutto per impostazione predefinita, il che può essere fastidioso se la tua applicazione crea molti file temporanei. Ecco come escludere i file quando si utilizza rsync.
Funzionalità importanti del comando rsync
- Velocità : la prima volta, rsync replica l’intero contenuto tra le directory di origine e di destinazione. La prossima volta, rsync trasferisce solo i blocchi o i byte modificati nella posizione di destinazione, il che rende il trasferimento molto veloce.
- Sicurezza : rsync consente la crittografia dei dati utilizzando il protocollo ssh durante il trasferimento.
- Bassa larghezza di banda: rsync utilizza la compressione e la decompressione dei dati blocco per blocco rispettivamente all’estremità di invio e ricezione. Quindi la larghezza di banda utilizzata da rsync sarà sempre inferiore rispetto ad altri protocolli di trasferimento file come FTP.
- privilegiato : Non sono richiesti privilegi speciali per installare ed eseguire rsync.
La sintassi di base di rsync è molto semplice e funziona in modo simile a ssh, scp e cp.
$ sudo rsync options source destination
- -v : prolisso.
- -r : copia i dati in modo ricorsivo (ma non conserva timestamp e autorizzazioni durante il trasferimento dei dati).
- -a : modalità archivio, la modalità archivio consente la copia ricorsiva dei file e conserva anche i collegamenti simbolici, i permessi dei file, le proprietà degli utenti e dei gruppi e i timestamp.
- -z: comprime i dati del file.
- -h : numeri leggibili dall’uomo, output in un formato leggibile dall’uomo.
- -d: trasferisce le directory senza ricorso -e: specifica ssh come shell remota.
Innanzitutto, crea una struttura di directory di esempio come mostrato di seguito (con alcuni file vuoti) che può essere utilizzata a scopo di test.
$ cd ~
$ sudo mkdir -p source/dir1/dir2
$ sudo mkdir -p source/dir3
$ sudo touch source/file1.txt
$ sudo touch source/file2.txt
$ sudo touch source/dir1/dir2/file3.txt
$ sudo touch source/dir3/file4.txt
I comandi precedenti creeranno una directory di origine (sotto la directory principale) con la seguente struttura, Per visualizzare la struttura della directory di origine, digitare il comando seguente.
$ sudo find source/
source
- file1.txt
- file2.txt
- dir1
- dir2
- file3.txt
- dir3
- file4.txt
1) Escludere una directory specifica
Per prima cosa tiriamo fuori destination
directory se esiste digitando sotto il comando.
$ sudo rm -rf destination
Se non vogliamo sincronizzare dir3
e le sue sottodirectory dalla cartella di origine alla cartella di destinazione, usiamo rsync --exclude
opzione come mostrato di seguito.
$ sudo rsync -avz --exclude 'dir3' source/ destination/
Per la sincronizzazione remota, possiamo inserire il comando seguente.
$ sudo rsync -avz --exclude 'dir3' source/ bobby@192.168.122.105:destination/
output
sending incremental file list
created directory destination
./
file1.txt
file2.txt
dir1/
dir1/dir2/
dir1/dir2/file3.txt
sent 307 bytes received 126 bytes 866.00 bytes/sec
total size is 0 speedup is 0.00
2) Escludere un file specifico
Se non vogliamo sincronizzare file3.txt
dalla cartella di origine alla cartella di destinazione, digitiamo sotto il comando.
$ sudo rm -rf destination
$ sudo rsync -avz --exclude 'dir1/dir2/file3.txt' source/ destination/
Per la sincronizzazione remota, possiamo inserire il comando seguente.
$ sudo rsync -avz --exclude 'dir1/dir2/file3.txt' source/ bobby@192.168.122.105:destination/
output
sending incremental file list
created directory destination
./
file1.txt
file2.txt
dir1/
dir1/dir2/
dir3/
dir3/file4.txt
sent 338 bytes received 130 bytes 936.00 bytes/sec
total size is 0 speedup is 0.00
Ad esempio, in tempo reale, quando si desidera rsync /var in una directory di backup, ma non si desidera includere la cache e la cartella tmp che di solito non contengono contenuti importanti tra i riavvii, è possibile utilizzare il seguente comando:
$ sudo rsync -aAXhv --exclude={"/var/cache","/var/tmp"} /var remoteuser@192.168.122.105:destination/
3) Escludere un tipo di file specifico
Per escluderne uno specifico con un’estensione specifica, utilizziamo il modello appropriato. Ad esempio, per escludere tutti i file contenenti .txt
come estensione, inseriamo il comando seguente.
$ sudo rm -rf destination
$ sudo rsync -avz --exclude '*.txt' source/ destination/
Per la sincronizzazione remota, possiamo inserire il comando seguente.
$ sudo rsync -avz --exclude '*.txt' source/ bobby@192.168.122.105:destination/
output
sending incremental file list
created directory destination
./
dir1/
dir1/dir2/
dir3/
sent 136 bytes received 65 bytes 402.00 bytes/sec
total size is 0 speedup is 0.00
4) Escludi più directory che corrispondono a un modello
Escluderemo qualsiasi directory (o sottodirectory) di seguito source/
che inizia con “dir”
$ sudo rm -rf destination
$ sudo rsync -avz --exclude 'dir*' source/ destination/
Per la sincronizzazione remota, possiamo inserire il comando seguente.
$ $ sudo rsync -avz --exclude 'dir*' source/ bobby@192.168.122.105:destination/
output
sending incremental file list
created directory destination
./
file1.txt
file2.txt
sent 168 bytes received 91 bytes 518.00 bytes/sec
total size is 0 speedup is 0.00
5) Escludi più file e directory contemporaneamente
Innanzitutto, crea un file di testo con un elenco di tutti i file e le directory di cui non desideri eseguire il backup. Questo è l’elenco di file e directory che vuoi escludere da rsync.
$ sudo nano exclude-list.txt
file2.txt
dir3/file4.txt
Quindi, esegui rsync using --exclude-from
opzione con exclude-list.txt
come mostrato di seguito.
$ sudo rm -rf destination
$ sudo rsync -avz --exclude-from 'exclude-list.txt' source/ destination/
Per la sincronizzazione remota, possiamo inserire il comando seguente.
$ sudo rsync -avz --exclude-from 'exclude-list.txt' source/ bobby@192.168.122.105:destination/
output
sending incremental file list
created directory destination
./
file1.txt
dir1/
dir1/dir2/
dir1/dir2/file3.txt
dir3/
sent 277 bytes received 111 bytes 776.00 bytes/sec
total size is 0 speedup is 0.00
6) Il percorso di esclusione è sempre relativo
L’opzione exclude sembra avere un percorso completo (ad esempio /dir3/file4.txt). Ma dal punto di vista di rsync, il percorso di esclusione è sempre relativo e verrà trattato come dir3/file4.txt. Nell’esempio seguente, rsync cercherà dir3 nella directory di origine (e non nella directory /root).
$ sudo rm -rf destination
$ sudo rsync -avz --exclude '/dir3/file4.txt' source/ destination/
Per la sincronizzazione remota, possiamo inserire il comando seguente.
$ sudo rsync -avz --exclude '/dir3/file4.txt' source/ bobby@192.168.122.105:destination/
output
sending incremental file list
created directory destination
./
file1.txt
file2.txt
dir1/
dir1/dir2/
dir1/dir2/file3.txt
dir3/
sent 334 bytes received 130 bytes 928.00 bytes/sec
total size is 0 speedup is 0.00
È simile al comando seguente.
$ sudo rsync -avz --exclude 'dir3/file4.txt' source/ destination/
7) Escludere i file dalla riga di comando
può anche escludere i file direttamente dalla riga di comando, questo è utile quando si dispone di un numero inferiore di file da escludere. Ad esempio, se vogliamo sincronizzare /source con una directory di destinazione, ma non vogliamo includere file3.txt e file4.txt, possiamo usare il seguente comando.
$ sudo rm -rf destination
$ sudo rsync -avz --exclude={"/dir1/dir2/file3.txt","/dir3/file4.txt"} source/ destinaton/
Per la sincronizzazione remota, possiamo inserire il comando seguente.
$ sudo rsync -avz --exclude={"/dir1/dir2/file3.txt","/dir3/file4.txt"} source/ bobby@192.168.122.105:destination/
output
sending incremental file list
./
file1.txt
file2.txt
dir1/
dir1/dir2/
dir3/
sent 268 bytes received 73 bytes 682.00 bytes/sec
total size is 0 speedup is 0.00
8) Escludi più file o cartelle
Quando vogliamo escludere i tipi di file *.txt
e una cartella specifica dir3
possiamo inserire il comando qui sotto.
$ sudo rm -rf destination
$ sudo rsync -avz --exclude '*.txt' --exclude 'dir3' source/ destination/
Per la sincronizzazione remota, possiamo inserire il comando seguente.
$ sudo rsync -avz --exclude '*.txt' --exclude 'dir3' source/ bobby@192.168.122.105:destination/
output
sending incremental file list
created directory destination
./
dir1/
dir1/dir2/
sent 109 bytes received 61 bytes 340.00 bytes/sec
total size is 0 speedup is 0.00
9) Escludi più directory con uno schema specifico
Possiamo anche fornire più directory con un modello specifico per l’esclusione. Useremo il carattere jolly *
finire dir
il nome del regista.
$ sudo rm -rf destination
$ sudo rsync -avz --exclude 'dir*' source/ destination/
Per la sincronizzazione remota, possiamo inserire il comando seguente.
$ sudo rsync -avz --exclude 'dir*' source/ bobby@192.168.122.105:destination/
output
sending incremental file list
created directory destination
./
file1.txt
file2.txt
sent 168 bytes received 91 bytes 518.00 bytes/sec
total size is 0 speedup is 0.00
10) Escludi file con determinate dimensioni
Durante il processo di copia, incontriamo alcuni file di grandi dimensioni da copiare. dobbiamo copiare alcuni film di dimensioni superiori a 1 GB. Quindi pensiamo che sarebbe meglio se potessimo semplicemente escludere file di grandi dimensioni o file non importanti per completare il backup il prima possibile.
Ad esempio, vogliamo escludere i file più grandi di 3 MB. Tutto quello che dobbiamo fare è usarlo --max-size=SIZE
opzione con il comando rsync. Questa opzione non trasferirà alcun file più grande della dimensione specificata.
$ sudo rm -rf destination
$ sudo rsync -avz --max-size=3m source/ destination/
Per la sincronizzazione remota, possiamo inserire il comando seguente.
$ sudo rsync -avz --max-size=3m source/ bobby@192.168.122.105:destination/
output
sending incremental file list
created directory destination
./
file1.txt
file2.txt
dir1/
dir1/dir2/
dir1/dir2/Bootstrap-tutorial.pdf
dir1/dir2/file3.txt
dir3/
dir3/file4.txt
sent 3,080,297 bytes received 168 bytes 6,160,930.00 bytes/sec
total size is 8,101,480 speedup is 2.63
Possiamo anche usare --min-size=SIZE
per escludere qualsiasi file più piccolo della dimensione specificata.
ad esempio, per escludere file di dimensioni inferiori a 7 MB, eseguire il seguente comando.
$ sudo rsync -avz --min-size=7m source/ destination/
output
sending incremental file list
created directory destination
./
dir1/
dir1/dir2/
dir3/
sent 313 bytes received 65 bytes 756.00 bytes/sec
total size is 8,101,480 speedup is 21,432.49
I suffissi delle dimensioni sono i seguenti:
- “K” (o “KiB”) è un kilobyte (1024)
- “M” (o “MiB”) è un megabyte (1024*1024)
- “G” (o “GiB”) è un gigabyte (1024*1024*1024)
Se vuoi che il moltiplicatore sia 1000 invece di 1024, usa “KB”, “MB” o “GB” (Nota: per tutti i valori sono accettate anche lettere minuscole).
Spero tu abbia gradito questo tutorial! Per favore, lascia i tuoi commenti