GNU/Linux >> Znalost Linux >  >> Linux

6 rsync Příklady k vyloučení více souborů a adresářů pomocí exclude-from

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

Linux
  1. Jak šifrovat a dešifrovat soubory a adresáře pomocí Tar a OpenSSL

  2. Jak komprimovat soubory a adresáře v systému Linux (s příklady)

  3. Pomocí možností Rsync zahrnout a vyloučit zahrnout adresář a soubor podle vzoru

  1. Jak odesílat a stahovat soubory pomocí Rsync

  2. CloudCross – Synchronizace souborů a adresářů s více cloudovými úložišti

  3. Použití rsync k synchronizaci souborů

  1. Linux Odstraňte soubory a adresáře

  2. Jak kopírovat soubory v Linuxu a Unixu? 10 cp Příklady příkazů

  3. Jak rekurzivně kopírovat adresáře pomocí rsync při vyloučení konkrétních souborů