質問 :rsync を使用しているときに、特定のフォルダー/ファイルを除外しながらフォルダーを再帰的にコピーする方法は?
通常、「cp」コマンドを使用してファイルをコピーしますが、残念ながら「cp」コマンドには「除外」機能がないため、不要なファイルを除外するスクリプトを作成するか、別のツールを使用することができます。 rsync'.
rsync コマンドの man ページから:
$ man rsync ... -r, --recursive recurse into directories --exclude=PATTERN exclude files matching PATTERN
特定のファイル/ディレクトリを除外してディレクトリをコピーする rsync コマンドの構文は次のとおりです:
$ rsync -r --exclude 'file_path' 'SRC' 'DEST'
たとえば、「oracle/oradata/rmanbackup」以外の oracle フォルダーのすべてのファイルを oraclebak にコピーしたくない場合:
$ 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
除外パスは、「SRC」の下のファイルの相対パスです。 「oracle/oradata/rmanbackup」を除外したいのですが、親ディレクトリは oracle であるため、除外パスは「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
オプション「–exclude-from=FILE 」を使用することもできます 除外するファイル/ディレクトリがさらにある場合。その場合、ファイルから除外するファイル/ディレクトリをリストし、オプション「–exclude-from=」にファイル パスを指定するだけです。
# man rsync --exclude-from=FILE read exclude patterns from FILE
例:
# rsync -r --exclude-file=/tmp/exclude_list oracle/ oraclebak
ここで、
/tmp/exclude_list には、他のファイルのコピー中に除外されるファイル/ディレクトリのリストが含まれています。