如何实现通用多线程Rsync传输,无需针对目录结构定制适配脚本?
问题解答
你的思路是否合理
你的思路完全合理,不需要针对不同目录结构单独写适配脚本,已有成熟的通用解决方案。
通用多线程rsync实现方案
分两种场景选择即可:
场景1:环境rsync版本≥3.2.0(主流新发行版默认已满足)
官方已经原生内置多线程支持,直接使用--threads参数即可,完全符合你预期的调用方式:
rsync -avr --threads=10 a/ b/
- 无需适配任何目录结构,自动拆分传输任务跑满指定线程数
- 原生实现比自行拼接的xargs方案更稳定,兼容rsync原有增量同步、权限保留等所有特性
- 跨主机传输时可额外加
--compress-choice=lz4参数启用多线程压缩,进一步提升传输效率
场景2:环境rsync版本低于3.2.0,无法升级
用find遍历所有文件配合xargs并行即可,通用适配任意目录结构:
cd a && find . -type f -print0 | xargs -0 -n1 -P10 -I{} rsync -aR {} ../b/
-print0和-0参数配合处理文件名带空格、特殊字符的场景,避免报错-R参数保留文件相对路径,自动在目标目录重建和源端一致的目录结构,不会出现文件堆在根目录的问题- 小文件占比高的场景可以把
-n1调整为-n10,每次同步10个文件,减少rsync进程fork的开销,速度可进一步提升
内容的提问来源于stack exchange,提问作者jessefournier
相关产品推荐
相关产品推荐

