如何最大化B2 Command Line Tool的sync命令:多线程、正则排除与dry-run参数全解析
【免费下载链接】B2_Command_Line_ToolThe command-line tool that gives easy access to all of the capabilities of B2 Cloud Storage项目地址: https://gitcode.com/gh_mirrors/b2/B2_Command_Line_Tool
B2 Command Line Tool 是 Backblaze B2 云存储的官方命令行工具,一条sync命令就能完成本地与云端之间的文件同步。这篇文章带你吃透 sync 命令的三大核心能力:多线程并发、正则排除规则与 dry-run 模拟运行,让你的 B2 备份和迁移又快又稳。
sync 命令能做什么?
sync是 B2 CLI 中功能最强的子命令,支持四种同步方向:
- 📤 本地文件夹 → B2 存储桶(上传备份)
- 📥 B2 存储桶 → 本地文件夹(下载恢复)
- 🔄 B2 桶 → 另一个 B2 桶(跨桶迁移)
- 📁 同一 B2 桶内不同目录之间(目录整理)
B2 路径使用b2://<桶名>/<前缀>格式,例如b2://my-bucket-name/a/path/prefix/。
先完成安装和授权(只需一次):
pip install b2 b2 authorize-account之后最基础的同步命令形如:
b2 sync /local/folder b2://my-bucket/backup/完整的参数定义位于 b2/_internal/console_tool.py,各版本命令注册逻辑见 b2/_internal/b2v3/sync.py 与 b2/_internal/b2v4/registry.py。
多线程参数:如何调出最高同步速度
sync 默认使用10 个线程,但你可以精细控制三类并发:
| 参数 | 作用 | 默认值 |
|---|---|---|
--threads | 一键同时设置下面三项 | 10 |
--sync-threads | 并行处理的文件数量 | 10 |
--upload-threads | 并行上传的文件/分片数 | 10 |
--download-threads | 并行下载的文件/分片数 | 10 |
调参技巧:
- ⚡千兆网络 + 大量小文件:把
--threads调高到 20~50,上传下载明显提速; - 🐢弱网或办公室共享带宽:官方明确建议减少线程数,甚至只用 1 个线程,避免影响其他同事;
- 🚧注意:
--threads不能与三个细分参数混用,混用会直接报错(逻辑见 b2/_internal/console_tool.py)。
经验法则是:文件越大,--upload-threads/--download-threads越重要(分片并行传输);文件越多越小,--sync-threads越重要(并行扫描与调度)。
正则排除:精准控制哪些文件不参与同步
这是 sync 最实用的能力之一,共四个正则参数:
--exclude-regex—— 忽略匹配的文件。模式针对文件完整路径做 Python 正则匹配;--include-regex—— 在排除中"捞回"指定文件(⚠️ 必须搭配--exclude-regex使用,单独使用会报错);--exclude-dir-regex—— 排除整个目录,目录内文件一律跳过,即使命中 include 规则也不看目录内部;--exclude-all-symlinks—— 从本地同步时跳过所有符号链接。
两条关键规则:
- 一条命令里可用竖线
|分隔多条正则,例如同时排除.DS_Store和.Spotlight-V100; - 正则按"从第一个字符开始的子串匹配"判定,所以
.*e会匹配hello。想匹配完整路径,请在末尾加$锚定,如.*llo$。
一个典型示例——备份时排除 macOS 垃圾文件和构建目录:
b2 sync ./project b2://my-bucket/project/ \ --exclude-regex '.*\.DS_Store$' --exclude-dir-regex '.*node_modules'💡 用--exclude-dir-regex排除无读权限的目录,还能顺带避免权限报错,非常实用。正则规则的管理逻辑封装在ScanPoliciesManager,参见 b2/_internal/console_tool.py。
dry-run 参数:先模拟,后执行,零风险同步
--dry-run是新手和运维人员都该养成的习惯:它只打印将要执行的操作清单,不真正上传、下载或删除任何文件。
三个最佳使用场景:
- 🧪首次同步前:先跑
b2 sync ... --dry-run,确认文件范围和方向没有搞反; - ⚠️配合
--delete使用:想删除目标端多余文件前,先用 dry-run 预览将被删除的完整清单,确认无误再真正执行; - 🔍排查比较策略:搭配
--verbose --dry-run,可以看到文件的修改时间/大小差异,判断哪些文件会被重新同步。
b2 sync ./project b2://my-bucket/project/ --delete --dry-run --verbosedry-run 标志从命令行解析后直接传给 Synchronizer,实现见 b2/_internal/console_tool.py。
进阶参数组合:让同步策略更智能
| 参数 | 用途 |
|---|---|
--compare-versions none / modTime / size | 文件比较策略,默认按修改时间 |
--compare-threshold | 模糊比较阈值(毫秒/字节),范围内视为相同,减少重复传输 |
--delete | 删除目标端源端没有的文件(与--keep-days互斥) |
--keep-days N | 保留旧版本 N 天后删除,官方比--delete更推荐,因为误删后有时间恢复 |
--skip-newer / --replace-newer | 目标文件更新时跳过 / 强制用源端覆盖 |
--allow-empty-source | 允许源目录为空时继续(否则直接报错,防止误清空桶) |
--no-progress | 隐藏进度条,适合脚本日志 |
💡 想让目标端与源端完全一致,推荐组合是--delete --replace-newer;如果担心误删,把--delete换成--keep-days 30就安全得多。
新手常见坑点清单
- ❌
--include-regex单独使用 → 报错,必须先有--exclude-regex - ❌
--threads与--upload-threads混用 → 报错 - ❌ 源目录为空或不存在 → 同步失败(这是保护机制,加
--allow-empty-source才能继续) - ❌ 正则没加
$锚定 → 意外匹配大量文件 - ❌ 同步出现警告或错误时命令退出码为 1,写脚本时务必检查退出码
这些行为的边界情况在项目测试中有完整覆盖,可参考 test/integration/test_b2_command_line.py,命令帮助文档源文件见 doc/source/commands.rst 和 doc/source/quick_start.rst。
总结:一条命令的黄金模板
把今天的干货浓缩成一个可复用的黄金模板:
b2 sync /local/data b2://my-bucket/data/ \ --threads 20 \ --exclude-regex '.*\.log$|.*\.tmp$' \ --exclude-dir-regex '.*cache' \ --keep-days 30 \ --dry-run # 首次执行务必保留,确认无误后去掉掌握多线程调参 + 正则排除 + dry-run 预演这三件套,你就解锁了 B2 Command Line Tool 中最高效的文件同步工作流——无论是每日增量备份、网站静态资源发布,还是跨桶数据迁移,一条 sync 命令全部搞定。🚀
【免费下载链接】B2_Command_Line_ToolThe command-line tool that gives easy access to all of the capabilities of B2 Cloud Storage项目地址: https://gitcode.com/gh_mirrors/b2/B2_Command_Line_Tool
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考