GNU/Linux >> Znalost Linux >  >> Linux

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

Otázka :Jak kopírovat složky rekurzivně a přitom vyloučit konkrétní složky/soubory při použití rsync?

Obecně ke kopírování souborů používáme příkaz 'cp', ale bohužel příkaz 'cp' nemá funkci "exclude", takže musíme napsat nějaké skripty pro vyloučení nežádoucích souborů, nebo můžeme použít jiný nástroj ' rsync'.

Z manuálové stránky příkazu rsync:

$ man rsync
...
  -r, --recursive             recurse into directories
  --exclude=PATTERN           exclude files matching PATTERN

Syntaxe příkazu rsync pro kopírování adresářů při vyloučení konkrétních souborů/adresářů je uvedena níže:

$ rsync -r --exclude 'file_path' 'SRC' 'DEST'

Pokud například nechceme kopírovat všechny soubory složky oracle do oraclebak kromě „oracle/oradata/rmanbackup“:

$ du -sh oracle/*
40K oracle/extapi
1.1G oracle/oradata                    ------> sub directory of oracle
4.0K oracle/test1
4.0K oracle/test2
4.0K oracle/test3
4.0K oracle/test4
4.0K oracle/test5
# du -sh oracle/oradata/*
4.0K oracle/oradata/date1
4.0K oracle/oradata/date2
4.0K oracle/oradata/date3
4.0K oracle/oradata/date4
4.0K oracle/oradata/date5
1.1G oracle/oradata/rmanbackup  -------> we need to exclude this directory

Cesta vyloučení je relativní cesta k souboru pod ‚SRC‘, např. chceme vyloučit „oracle/oradata/rmanbackup“ a nadřazený adresář je oracle, takže cesta vyloučení je „oradata/rmanbackup“:

# rsync -r --exclude 'oradata/rmanbackup' oracle/ oraclebak
# du -sh oraclebak/oracle/*
40K oraclebak/oracle/extapi
24K oraclebak/oracle/oradata
4.0K oraclebak/oracle/test1
4.0K oraclebak/oracle/test2
4.0K oraclebak/oracle/test3
4.0K oraclebak/oracle/test4
4.0K oraclebak/oracle/test5

Můžete také použít možnost „–exclude-from=FILE ” pokud máte více souborů/adresářů, které mají být vyloučeny. V takovém případě stačí vypsat seznam souborů/adresářů, které mají být ze souboru vyloučeny, a zadat cestu k souboru do možnosti „–exclude-from=“

# man rsync
--exclude-from=FILE     read exclude patterns from FILE

Například:

# rsync -r --exclude-file=/tmp/exclude_list oracle/ oraclebak

Zde
/tmp/exclude_list obsahuje seznam souborů/adresářů, které mají být vyloučeny při kopírování ostatních.


Linux
  1. Jak používat příkaz Rsync v linuxu?

  2. Použití rsync k synchronizaci souborů

  3. Jak zkopírovat adresáře do adresáře pomocí instalace v bash?

  1. Jak vyloučit konkrétní adresáře z kopírování v Linuxu

  2. Jak kopírovat více souborů současně pomocí scp

  3. Může scp kopírovat adresáře rekurzivně?

  1. Jak kopírovat soubory a adresáře v Linuxu

  2. Jak používat rsync k vyloučení souborů a adresářů v přenosu dat

  3. Jak rekurzivně kopírovat soubory podle přípony souboru?