Rsync è uno strumento molto potente per eseguire backup o sincronizzare file e directory tra due diverse posizioni (o server).
Lo sai già, poiché in precedenza ti abbiamo presentato esempi pratici su rsync.
In una situazione di backup tipica, potresti voler escludere uno o più file (o directory) dal backup. Potresti anche voler escludere un tipo di file specifico da rsync.
Questo articolo spiega come ignorare più file e/o directory durante la rsync con esempi.
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 ~ $ mkdir -p source/dir1/dir2 $ mkdir -p source/dir3 $ touch source/file1.txt $ touch source/file2.txt $ touch source/dir1/dir2/file3.txt $ touch source/dir3/file4.txt
Il comando precedente creerà una directory di origine (sotto la tua directory home) con la seguente struttura.
source - file1.txt - file2.txt - dir1 - dir2 - file3.txt - dir3 - file4.txt
1. Escludi una directory specifica
Se non vuoi sincronizzare la dir1 (incluse tutte le sue sottodirectory) dalla cartella di origine a quella di destinazione, usa l'opzione rsync –exclude come mostrato di seguito.
$ rm -rf destination $ rsync -avz --exclude 'dir1' source/ destination/ building file list ... done created directory dest ./ file1.txt file2.txt dir3/ dir3/file4.txt
Verificare per assicurarsi che dir1 non sia copiato dalla directory di origine alla directory di destinazione.
$ find destination destination destination/file2.txt destination/file1.txt destination/dir3 destination/dir3/file4.txt
2. Escludi più directory che corrispondono a un modello
L'esempio seguente escluderà qualsiasi directory (o sottodirectory) in source/ che corrisponde al modello "dir*"
$ rm -rf destination $ rsync -avz --exclude 'dir*' source/ destination/ building file list ... done created directory destination ./ file1.txt file2.txt
Verifica la directory di destinazione per assicurarti che non abbia copiato alcuna directory contenente la parola chiave "dir".
$ find destination destination destination/file2.txt destination/file1.txt
3. Escludi un file specifico
Per escludere un file specifico, utilizza il percorso relativo del file nell'opzione di esclusione come mostrato di seguito.
$ rm -rf destination $ rsync -avz --exclude 'dir1/dir2/file3.txt' source/ destination/ building file list ... done created directory destination ./ file1.txt file2.txt dir1/ dir1/dir2/ dir3/ dir3/file4.txt
Verifica la directory di destinazione per assicurarti che non abbia copiato il file specifico ( dir1/dir2/file3.txt in questo esempio).
$ find destination destination destination/file2.txt destination/file1.txt destination/dir1 destination/dir1/dir2 destination/dir3 destination/dir3/file4.txt
4. Il percorso di esclusione è sempre relativo
Se non stai attento, potresti commettere questo errore.
Nell'esempio seguente, l'opzione di esclusione sembra avere un percorso completo (ad esempio /dir1/dir2/file3.txt). Ma, dal punto di vista di rsync, il percorso di esclusione è sempre relativo e verrà trattato come dir1/dir2/file3.txt. Nell'esempio seguente, rsync cercherà dir1 nella directory di origine (e non nella directory / root).
$ rsync -avz --exclude '/dir1/dir2/file3.txt' source/ destination/
Quindi, il comando sopra è esattamente lo stesso del seguente. Giusto per evitare confusione (e per facilitarne la lettura), non dare / davanti al percorso di esclusione.
$ rsync -avz --exclude 'dir1/dir2/file3.txt' source/ destination/
5. Escludi un tipo di file specifico
Per escludere un tipo di file specifico con un'estensione specifica, utilizzare il modello appropriato. Ad esempio, per escludere tutti i file che contengono .txt come estensione, procedi come segue.
$ rsync -avz --exclude '*.txt' source/ destination/ building file list ... done created directory destination ./ dir1/ dir1/dir2/ dir3/
Verifica la directory di destinazione per assicurarti che non abbia copiato i file *.txt.
$ find destination destination destination/dir1 destination/dir1/dir2 destination/dir3
Nota: Quanto sopra è molto utile, quando vuoi eseguire il backup della tua home directory, ma esclude tutti quei file di immagini e video di grandi dimensioni che hanno un'estensione di file specifica.
6. Escludi più file e directory contemporaneamente
Quando desideri escludere più file e directory, puoi sempre specificare più opzioni di esclusione di rsync nella riga di comando, come mostrato di seguito.
$ rsync -avz --exclude file1.txt --exclude dir3/file4.txt source/ destination/
Attesa. E se avessi tonnellate di file che voglio escludere da rsync?
Non posso continuare ad aggiungerli nella riga di comando usando multiple –exclude, che è difficile da leggere e difficile da riutilizzare il comando rsync per dopo.
Quindi, il modo migliore è usare l'opzione rsync –exclude-from come mostrato di seguito, dove puoi elencare tutti i file (e le directory) che desideri escludere in un file.
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 dalla rsync.
$ vim exclude-list.txt file1.txt dir3/file4.txt
Quindi, esegui la rsync usando l'opzione –exclude-from con exclude-list.txt come mostrato di seguito.
$ rm -rf destination $ rsync -avz --exclude-from 'exclude-list.txt' source/ destination/ building file list ... done created directory destination ./ file2.txt dir1/ dir1/dir2/ dir1/dir2/file3.txt dir3/
Verifica la directory di destinazione per assicurarti che non venga eseguito il backup dei file e delle directory elencati nel file exclude-list.txt.
$ find destination destination destination/file2.txt destination/dir1 destination/dir1/dir2 destination/dir1/dir2/file3.txt destination/dir3