文章

为了在两台电脑上打《僵尸毁灭工程》,我搓了一个文件同步工具

起因很简单:我在两台电脑上都玩《僵尸毁灭工程》。游戏能重下,角色能重练,几十个小时攒下的存档,没了就是真没了。所以我要做的事其实很小——把一个文件夹,安全地从 A 电脑搬到 B 电脑。下一次再安全的搬回来。

现成的方案不少,就是都不顺手

一开始我根本没想自己写。为了复制一个文件夹造轮子,说出去很怪。网盘、实时同步、Git、rclone、手动压缩扔聊天软件,挨个试了一圈。

方案优点在这个场景里的问题
网盘(OneDrive / Dropbox)开箱即用,自动同步自动得过于积极,游戏还在写存档它就可能开工;冲突副本不直观,出了问题要考古
Syncthing 一类实时同步强大、免费、去中心化两台设备最好都在线;为偶尔搬一次存档,配置偏重
Git版本历史无敌大量二进制文件不是它的舒适区;先 pull、处理冲突、再 commit,娱乐变上班
rclone 一类命令行专业灵活先 dry-run、再确认方向、再敲命令,不适合只想打游戏的时刻
手动压缩上传简单可控今天 save-final.zip,明天 save-final-2.zip,后天 save-final-真的最终版.zip

它们都在解决比我更大的问题。而我的需求就三条:走之前点上传,坐下时点下载;动手之前把后果说清楚;游戏开着别碰存档,选错目录的时候,别把我云端清空。

既然现成的轮子都多出我用不上的齿,那就自己搓一个。

MiniSync 是什么

MiniSync 是 Windows 下的轻量文件夹镜像客户端,直接对接 Cloudflare R2,兼容标准 S3 接口。

它刻意不做 Dropbox 那种后台实时双向同步。上传和下载都由用户手动触发:先扫描本地与云端,把新增、覆盖、删除、保持不变的文件完整列出,确认之后才开始传输。

它也不是协作工具。同一个项目同一时间只允许一台设备操作,另一台设备看到的不是一堆协议字段,而是一句"这个项目正在被某设备使用"。游戏存档、模组目录、模拟器数据,各建各的项目,云端和锁都是独立的。

轻量不等于简陋,只是把复杂度藏在程序里,界面上只剩两件事:现在是否安全,下一步按哪个按钮。

防的就是别把我存档扬了

文件同步工具最要紧的不是快,而是在各种情况下别自作聪明。

先算账,再动手。 每次上传下载先生成完整计划:传多少、覆盖多少、删除多少、总传输量多大。计划可以展开成目录树逐条核对,方向没反才执行。如果一次操作要删除超过 100 个文件且占比超过 20%,会触发大规模删除保护,必须为这一次操作单独确认——选错一个空目录,云端不该跟着变秃。

游戏开着,谁都别动。 每个项目可以配置保护进程,比如 ProjectZomboid64.exe。进程在跑,对应项目就拒绝上传下载,开始前查、传输中也持续查。连 Windows 的进程列表都读不出来的时候,宁可停下,也不赌运气。

失败得有交代。 上传按"先传新增和变化的文件、再清理云端多余文件、最后提交状态"的顺序走,中途失败会明确提示"还有一次未完成的操作",不假装成功。下载先写入临时文件,校验大小后再替换正式文件,并恢复修改时间;全部成功才删除本地多余内容。中途中断,云端原样,本地标记为待重新下载。

这一圈保护落到一句话:危险操作可以做,但不许稀里糊涂地做。

表面就两个按钮,底下事不少

技术栈是 Wails v2:后端 Go,前端 React + TypeScript。目录扫描、进程检测、并发传输、R2/S3 通信、本机凭据,是 Go 的活;项目列表、文件差异、计划确认、恢复提示,是 React 的活。最终产物是原生 Windows 程序,用户不用装 Node.js,也不用开浏览器访问本地端口。

存储端直接就是 R2,没有中转服务器。用户填自己的 API 地址、Bucket、云端目录和访问密钥,数据从电脑直接进入自己的存储空间。Secret 存在 Windows Credential Manager 里,不落配置文件、日志或错误信息。没有中间服务器,也就没有续费、硬盘爆炸、数据库迁移和半夜告警这些事。

每个项目在云端有独立的文件索引、版本和锁;符号链接、Junction、Reparse Point、临时文件和协议文件,都不混进普通文件索引。为了这两个按钮靠得住,底下是一整套针对版本冲突、条件锁、失败恢复、原子替换、批量删除和进程保护的测试。

边界,也说清楚

面向 Windows 10/11,用「大小 + 修改时间」判断文件是否变化,不计算内容 Hash;不保存空目录、ACL、ADS 或符号链接;不支持多人同时编辑。严格说,它甚至不算传统意义的"双向同步":上传时听本地的,下载时听云端的。这是刻意的选择——自动猜冲突听着高级,猜错一次就是你几十个小时的进度。

没有后台监听、自动合并、手机端、在线预览。它只干一件事:把一个文件夹,安全、明白、可控地镜像到另一台电脑。

下载

Windows Beta 版:

下载 MiniSync Beta for Windows

首次启动填自己的 R2 信息,程序会先实测读、写、删三项能力,通过后才允许保存配置。Beta 阶段,重要文件还是建议自己留一份独立备份——软件可以吹牛,存档最好别拿来验证作者的自信心。

最后

这条演化路线是个人开发者的经典病:碰上一个复制文件就能解决的小问题,发现现成的全都不顺手,写了个脚本,加了层界面,最后开始研究条件请求、并发控制和崩溃恢复。伟大的基础设施,多半都从"这玩意儿我十分钟就能写完"开始。

MiniSync 谈不上伟大,但它把"今天到底有没有复制最新存档"这个问题,从我脑子里删掉了。现在换电脑,退出游戏,看一眼计划,点上传,完事。

舒服了。

License:  CC BY 4.0