如何让rsync仅同步根目录下新增的文件夹与文件?
解决方案
可以通过rsync的包含/排除规则实现仅同步新增的顶层备份文件夹,同时保留硬链接和镜像删除的核心需求,命令如下:
rsync -a -H --delete --progress --stats --human-readable \ --include='backup-*/' \ --include='backup-*' \ --exclude='*' \ --prune-empty-dirs \ /source/ /target
参数说明与逻辑解析
--include='backup-*/':优先匹配所有以backup-开头的顶层文件夹,确保rsync识别并处理这些目录项。--include='backup-*':补充匹配所有以backup-开头的非目录项(如果源目录存在这类文件),避免遗漏。--exclude='*':排除所有未被上述规则匹配的内容,限定rsync仅关注目标备份文件夹。--prune-empty-dirs:自动清理目标目录中因删除操作产生的空文件夹,保持结构整洁(可选但推荐)。- 保留核心需求参数:
-H:完整保留新增备份文件夹内的硬链接结构,不会重复复制文件。--delete:同步源目录的删除操作,移除目标中存在但源已删除的backup-开头文件夹,适配备份转存改名的场景。
为什么能解决耗时问题?
该规则让rsync仅遍历源目录的顶层内容,不会深入已存在的backup-文件夹内部检查文件变化——对于目标已存在的同名称文件夹,rsync直接跳过递归检查,仅处理新增的文件夹,大幅缩短同步时间。
对比--ignore-existing的优势
--ignore-existing仅跳过已存在的文件,但仍会递归遍历所有已存在的文件夹内部,无法从根本上减少检查耗时。本方案通过规则直接限定rsync的处理范围,完全避免了对已有备份文件夹内部的遍历操作。
内容的提问来源于stack exchange,提问作者globalinfo
相关产品推荐
相关产品推荐

