如何用Rsync按文件名范围分批转移12TB目录至4块4TB硬盘
Rsync多排除模式失效的解决方案
问题原因
你之前的写法--exclude={"_*/","[0-9]*/","[A-C]*/","[H-Z]*/"}失效,是因为外层引号导致shell无法扩展大括号,rsync会把整个字符串当作单一排除规则,仅匹配第一个逗号前的_*/模式,其余部分被忽略。
可行解决方案
方案1:使用多个独立的--exclude参数(兼容性最好)
直接为每个排除规则单独指定--exclude,无需依赖shell的大括号扩展,适用于所有shell环境:
# 同步D-H开头目录到第二块硬盘的示例命令 rsync -av --exclude="_*/" --exclude="[0-9]*/" --exclude="[A-C]*/" --exclude="[I-Z]*/" /你的源目录/ /mnt/disk2/
方案2:让shell正确扩展大括号(仅适用于bash/zsh等支持大括号扩展的shell)
去掉外层引号,让shell自动将大括号内容扩展为多个--exclude参数:
rsync -av --exclude={"_*/","[0-9]*/","[A-C]*/","[H-Z]*/"} /你的源目录/ /mnt/disk2/
注意:如果用sh等不支持大括号扩展的shell执行,这个写法依然会失效,优先推荐方案1。
分硬盘同步的对应规则
根据你的需求,4块硬盘的同步规则可以这样设置:
- 第一块硬盘(0-9、A-C开头):排除下划线、D-Z开头目录
rsync -av --exclude="_*/" --exclude="[D-Z]*/" /你的源目录/ /mnt/disk1/ - 第二块硬盘(D-H开头):使用上述你需要的排除规则即可
- 第三/四块硬盘(I-Z拆分):先排除下划线、0-9、A-H开头目录同步I-Z内容,若容量超过3TB,再拆分为I-M和N-Z分别同步到两块硬盘
- 验证技巧:每次同步前用
rsync -avn(dry run模式)测试,确认待同步目录符合预期,避免误操作。
内容的提问来源于stack exchange,提问作者tookys
相关产品推荐
相关产品推荐

