如何让rsync按数字顺序同步以序号命名的文件?
解决rsync按数字顺序同步文件的问题
核心问题原因
你之前用--files-from没达到预期,是因为rsync默认会自动对--files-from传入的列表做字典序排序,完全忽略你输入列表的原有顺序——哪怕你生成的list是数字顺序,rsync还是会重新排序。
解决方案步骤
1. 生成准确的数字顺序文件列表
两种可靠方式:
- 方式一:用ls的自然排序(适合文件已存在的场景)
执行ls -v *.tld > list-of-files.txt,-v参数会按数字大小排序,完美匹配你的1.tld、2.tld...命名规则,比-tr更靠谱(-tr是按修改时间排序,若文件创建/修改时间混乱就会出错)。 - 方式二:用printf生成精确列表(适合明确最大文件编号的场景)
如果确定最大编号是3550,直接用printf "%s\n" {1..3550}.tld > list-of-files.txt,这个命令会直接生成1到3550的顺序列表,哪怕某个文件缺失,rsync同步时会自动跳过不存在的文件,不影响流程。
2. 让rsync严格按列表顺序同步
执行rsync时加上--no-sort参数,禁用它的自动排序行为,命令如下:
rsync -avz --no-sort --files-from=list-of-files.txt source/ dest/
注意:source后面要加斜杠/,避免rsync在dest里额外创建一个source目录。
中途中断后的续传技巧
如果中途按Ctrl-C终止,想要继续从上次中断的位置同步:
- 查看rsync输出的最后一行,找到最后一个成功同步的文件(比如7510.tld)。
- 生成新的列表,从下一个编号开始:
printf "%s\n" {7511..3550}.tld > new-list.txt - 用新列表继续同步即可。
内容的提问来源于stack exchange,提问作者dstonek
相关产品推荐
相关产品推荐

