Rsync je velmi výkonný nástroj pro vytváření záloh nebo synchronizaci souborů a adresářů mezi dvěma různými umístěními (nebo servery).
Už to víte, protože jsme vám již dříve představili praktické příklady na rsync.
V typické situaci zálohování můžete chtít vyloučit jeden nebo více souborů (nebo adresářů) ze zálohy. Můžete také chtít vyloučit konkrétní typ souboru z rsync.
Tento článek vysvětluje, jak ignorovat více souborů a/nebo adresářů během rsync s příklady.
Nejprve vytvořte ukázkovou adresářovou strukturu, jak je uvedeno níže (s několika prázdnými soubory), kterou lze použít pro účely testování.
$ 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
Výše uvedený příkaz vytvoří zdrojový adresář (pod vaším domovským adresářem) s následující strukturou.
source - file1.txt - file2.txt - dir1 - dir2 - file3.txt - dir3 - file4.txt
1. Vyloučit konkrétní adresář
Pokud nechcete synchronizovat dir1 (včetně všech jeho podadresářů) ze zdroje do cílové složky, použijte volbu rsync –exclude, jak je uvedeno níže.
$ rm -rf destination $ rsync -avz --exclude 'dir1' source/ destination/ building file list ... done created directory dest ./ file1.txt file2.txt dir3/ dir3/file4.txt
Ověřte, že dir1 není zkopírován ze zdrojového adresáře do cílového adresáře.
$ find destination destination destination/file2.txt destination/file1.txt destination/dir3 destination/dir3/file4.txt
2. Vyloučit více adresářů, které odpovídají vzoru
Následující příklad vyloučí jakýkoli adresář (nebo podadresáře) pod zdrojovým kódem/, který odpovídá vzoru „dir*“
$ rm -rf destination $ rsync -avz --exclude 'dir*' source/ destination/ building file list ... done created directory destination ./ file1.txt file2.txt
Ověřte cílový adresář, abyste se ujistili, že nezkopíroval žádné adresáře, které obsahují klíčové slovo „dir“.
$ find destination destination destination/file2.txt destination/file1.txt
3. Vyloučit konkrétní soubor
Chcete-li vyloučit konkrétní soubor, použijte relativní cestu k souboru v možnosti vyloučit, jak je uvedeno níže.
$ 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
Ověřte cílový adresář, abyste se ujistili, že nezkopíroval konkrétní soubor (v tomto příkladu dir1/dir2/file3.txt).
$ find destination destination destination/file2.txt destination/file1.txt destination/dir1 destination/dir1/dir2 destination/dir3 destination/dir3/file4.txt
4. Vyloučit cestu je vždy relativní
Pokud si nedáte pozor, můžete udělat tuto chybu.
V následujícím příkladu se zdá, že možnost vyloučit má úplnou cestu (tj. /dir1/dir2/file3.txt). Ale z hlediska rsync je cesta k vyloučení vždy relativní a bude s ní zacházeno jako s dir1/dir2/file3.txt. V níže uvedeném příkladu bude rsync hledat dir1 ve zdrojovém adresáři (a ne v / kořenovém adresáři).
$ rsync -avz --exclude '/dir1/dir2/file3.txt' source/ destination/
Výše uvedený příkaz je tedy přesně stejný jako následující. Aby se předešlo zmatkům (a aby to bylo snadno čitelné), neuvádějte / před cestu vyloučení.
$ rsync -avz --exclude 'dir1/dir2/file3.txt' source/ destination/
5. Vyloučit konkrétní typ souboru
Chcete-li vyloučit konkrétní typ souboru, který má určitou příponu, použijte příslušný vzor. Chcete-li například vyloučit všechny soubory, které obsahují příponu .txt, proveďte následující.
$ rsync -avz --exclude '*.txt' source/ destination/ building file list ... done created directory destination ./ dir1/ dir1/dir2/ dir3/
Ověřte cílový adresář a ujistěte se, že nezkopíroval soubory *.txt.
$ find destination destination destination/dir1 destination/dir1/dir2 destination/dir3
Poznámka: Výše uvedené je velmi užitečné, když chcete zálohovat svůj domovský adresář, ale vyloučit všechny ty velké soubory obrázků a videí, které mají konkrétní příponu souboru.
6. Vyloučit více souborů a adresářů současně
Pokud chcete vyloučit více souborů a adresářů, můžete vždy zadat více možností vyloučení rsync v příkazovém řádku, jak je uvedeno níže.
$ rsync -avz --exclude file1.txt --exclude dir3/file4.txt source/ destination/
Počkejte. Co kdybych měl spoustu souborů, které chci vyloučit z rsync?
Nemohu je neustále přidávat do příkazového řádku pomocí vícenásobného –exclude, které je obtížně čitelné a obtížné znovu použít příkaz rsync na později.
Takže lepší způsob je použít volbu rsync –exclude-from, jak je uvedeno níže, kde můžete vypsat všechny soubory (a adresáře), které chcete v souboru vyloučit.
Nejprve vytvořte textový soubor se seznamem všech souborů a adresářů, které nechcete zálohovat. Toto je seznam souborů a adresářů, které chcete vyloučit z rsync.
$ vim exclude-list.txt file1.txt dir3/file4.txt
Dále spusťte rsync pomocí volby –exclude-from pomocí souboru exclude-list.txt, jak je uvedeno níže.
$ 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/
Ověřte cílový adresář a ujistěte se, že soubory a adresáře uvedené v souboru exclude-list.txt nejsou zálohovány.
$ find destination destination destination/file2.txt destination/dir1 destination/dir1/dir2 destination/dir1/dir2/file3.txt destination/dir3