如何最大化B2 Command Line Tool的sync命令:多线程、正则排除与dry-run参数全解析
2026/8/22 14:49:04 网站建设 项目流程

如何最大化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 最实用的能力之一,共四个正则参数:

  1. --exclude-regex—— 忽略匹配的文件。模式针对文件完整路径做 Python 正则匹配;
  2. --include-regex—— 在排除中"捞回"指定文件(⚠️ 必须搭配--exclude-regex使用,单独使用会报错);
  3. --exclude-dir-regex—— 排除整个目录,目录内文件一律跳过,即使命中 include 规则也不看目录内部;
  4. --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是新手和运维人员都该养成的习惯:它只打印将要执行的操作清单,不真正上传、下载或删除任何文件。

三个最佳使用场景:

  1. 🧪首次同步前:先跑b2 sync ... --dry-run,确认文件范围和方向没有搞反;
  2. ⚠️配合--delete使用:想删除目标端多余文件前,先用 dry-run 预览将被删除的完整清单,确认无误再真正执行;
  3. 🔍排查比较策略:搭配--verbose --dry-run,可以看到文件的修改时间/大小差异,判断哪些文件会被重新同步。
b2 sync ./project b2://my-bucket/project/ --delete --dry-run --verbose

dry-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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询