https://onitroad.com 更多教程
解决方法
一般来说,我们使用'cp'命令来复制文件,但不幸的是,'cp'命令没有“排除”功能,所以我们需要编写一些脚本来排除不需要的文件,或者我们可以使用其他工具' rsync'。
从 rsync 命令的手册页:
$ man rsync ... -r, --recursive recurse into directories --exclude=PATTERN exclude files matching PATTERN
rsync 命令复制目录同时排除特定文件/目录的语法如下所示:
$ rsync -r --exclude 'file_path' 'SRC' 'DEST'
例如,如果我们不想将 oracle 文件夹的所有文件都复制到 oraclebak 中,除了 '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
排除路径是“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 包含复制其他文件/目录时要排除的文件/目录列表。
问题
使用 rsync 时如何在排除特定文件夹/文件的同时递归复制文件夹?
日期:2020-09-17 00:10:54 来源:oir作者:oir