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.