我使用以下 bash 脚本仅复制具有特定扩展名的文件(在本例中为 *.sh),但它仍会复制所有文件。怎么了?
from=$1 to=$2 rsync -zarv --include="*.sh" $from $to
最佳答案
我认为 --include
用于包含被 --exclude
排除的文件子集,而不是只包括那些文件。
换句话说:您必须考虑 include 的含义不排除。
试试吧:
rsync -zarv --include "*/" --exclude="*" --include="*.sh" "$from" "$to"
对于rsync 3.0.6或更高版本,需要修改顺序如下(见注释):
rsync -zarv --include="*/" --include="*.sh" --exclude="*" "$from" "$to"
添加 -m
flag 将避免在目标中创建空目录结构。在 3.1.2 版本中测试。
所以如果我们只想要 *.sh 文件,我们必须排除所有文件 --exclude="*"
, 包括所有目录 --include="*/"
并包含所有 *.sh 文件 --include="*.sh"
.
您可以在man page 的包含/排除模式规则部分找到一些很好的示例。
关于linux - rsync 使用包含选项仅复制某些类型的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11111562/