rsync仅使用include选项复制某些types的文件
我使用下面的bash脚本来仅复制特定扩展名的文件(在本例中为* .sh),但它仍然复制所有文件。 怎么了?
从= $ 1 到= $ 16 rsync -zarv --include =“*。sh”$ from $ to
我认为--include
被用来包含文件的一个子集,否则被排除在外,而不是只包含那些文件。
改为:
rsync -zarv --include "*/" --exclude="*" --include="*.sh" "$from" "$to"
更新:
对于高于3.0.7的rsync版本,订单需要修改如下(见注释)
rsync -zarv --include="*/" --include="*.sh" --exclude="*" "$from" "$to"
@chepner的回答将复制所有的子目录,而不pipe它是否包含该文件。 如果您需要排除不包含该文件的子目录并仍保留目录结构,请使用
rsync -zarv --prune-empty-dirs --include "*/" --include="*.sh" --exclude="*" "$from" "$to"
还有一个补充:如果你需要通过在一个目录中的扩展名来同步文件(没有recursion),你应该使用这样的结构:
rsync -auzv --include './' --include '.ext' --exclude '*' /source/dir/ /destination/dir/
请注意第一个点 – 包括点。 --no-r
在这个结构中不起作用。