我认为
--include过去是用来包含文件的子集,否则会被排除
--exclude,而不仅仅是包括那些文件。换句话说:您必须考虑 包含 含义
,不要排除 。
请尝试:
rsync -zarv --include "*/" --exclude="*" --include="*.sh" "$from" "$to"
对于rsync 3.0.6或更高版本,需要按以下方式修改顺序(请参见注释):
rsync -zarv --include="*/" --include="*.sh" --exclude="*" "$from" "$to"
添加该
-m标志将避免在目标位置创建空目录结构。在3.1.2版中测试。
因此,如果只希望 .sh文件,则必须排除所有文件--exclude="*"
,包括所有目录,--include="*/"
并包括所有
.sh文件
--include="*.sh"。
您可以在手册页的 “包括/排除模式规则”
部分中找到一些很好的示例。



