LINUX

10 Comando Linux rsync per escludere file/directory

Comandi di esclusione di Linux Rsync

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 dir3possiamo 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

Leggi anche:

Related Articles

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Back to top button
Close