Rclone 是一个命令行文件同步工具:一个 exe,能把文件在本地目录、S3 和 WebDAV 各家网盘之间搬。它不带图形界面,但能自己起一个 WebDAV 目录页,浏览器打开就能点着看。

它解决的是「多个存储之间怎么对齐」这件事。手工拷文件容易漏,写脚本又得处理断点和增量。rclone 把这些做成一条命令。

这次用两个本地目录当源和目标,跑了同步、校验、统计和起服务四步,每步都在一秒以内。数字全部记在下面。

一个 exe 管几十种存储后端

它的模型很简单:把每个存储位置配成一个 remote,写进一份配置文件,之后所有命令都用 remote 名字操作。

配置文件是纯文本,一行一个 remote,可以随时拷给另一台机器用。这条路子跟服务器上配一台机器再 ssh 过去是一个思路。

概念含义本次用的值
remote一个存储位置的别名src / dst
type后端类型local
path该 remote 下的路径本地绝对路径
config配置文件rclone.conf

装的过程

zip 31634900 字节,解开六个文件,其中 rclone.exe 85500928 字节,解压 0.45 秒。剩下的是 README、LICENSE 和文档。

单文件不依赖运行时,拷到 PATH 里就能用。Windows 上它启动一次 0.59 秒,比多数带界面的工具都快。

项目字节
zip 包31634900
rclone.exe85500928
解压文件数6 个

配置两个 remote 用了 1.32 秒

命令行建 remote 不用进交互界面,一条命令一个:rclone config create 名字 类型。第一个 0.90 秒,第二个 0.42 秒,差在第一次要创建配置文件。

建完打开 rclone.conf 能看到两段,每段三行:类型、路径、名字。改配置直接编辑这个文件,不用重跑命令。

命令耗时结果
rclone version0.59 秒v1.75.2
config create src local0.90 秒新建配置文件
config create dst local0.42 秒追加一个 remote

不用 remote 也能跑

直接写两个本地路径,rclone sync D:\a D:\b 也能同步。remote 的价值在跨机器和跨协议:换成 S3 就是把路径换成 s3:bucket/前缀,命令结构一点不变。

这次为了走完整流程才配了 remote。日常只搬本地目录的人可以直接用路径。

同步 51 个文件 0.55 秒

源目录 51 个文件 21121520 字节,其中一个大文件 20 MB,另外五十个是几 KB 的文本,分散在五个子目录里。

一条 rclone sync 跑完 0.55 秒,进度显示 20.143 MiB 全部传完。目标目录的文件数和字节数与源完全一致,都是 51 个、21121520 字节。

项目数值
源文件数51 个(1 个大文件加 50 个小文件)
源字节21121520 字节
同步耗时0.55 秒
目标文件数51 个
目标字节21121520 字节

sync 会删东西

这是最需要说清的一点:sync 让目标变成源的镜像,源里删掉的文件,目标里也会被删。copy 只增不删。

第一次用建议先加 --dry-run,看一眼会动哪些文件再真跑。这个参数不写文件,只打印计划。

零字节传输也算一次比对

0.55 秒搬 20 MB 是本地磁盘的成绩。它的实际工作分两段:先列文件比对大小和修改时间,再传差异部分。第二遍跑同样的命令会更快,因为比对完发现没有差异。

校验和统计各半秒内

rclone check 用 0.47 秒比对完两边,输出 51 matching files,没有差异。它做的是哈希比对,比看大小可靠。

rclone size 用 0.29 秒报出 Total objects 51、Total size 20.143 MiB。想在同步前后各跑一次对账,这条够用。

命令耗时输出
check src: dst:0.47 秒51 matching files
size dst:0.29 秒51 个对象 / 20.143 MiB

哈希要比对就加 --checksum

默认同步按大小和修改时间判断要不要传。跨时区或者用不同文件系统时,时间戳会对不上,加 --checksum 改成按哈希判断,慢一点但准。

网盘场景尤其要加,因为很多网盘返回的修改时间精度只到分钟。

起一个 WebDAV 目录 0.54 秒

rclone serve webdav 可以把任意 remote 挂成一个 HTTP 目录,浏览器打开就能浏览和下载。启动到能访问 0.54 秒。

页面很朴素:一个 filter 输入框,一张表列出名字、大小、修改时间。点目录进去,点文件下载。加 --read-only 之后只能看不能改。

rclone serve webdav 的目录页:filter 输入框加五个子目录和一个 20.00 MiB 的文件,带大小与修改时间两列
子目录 /dir0/ 的页面:同步过去的文本文件按名字排序,可直接点开下载

五种 serve 模式

同一个命令支持 http、webdav 和 ftp 等五种协议。选哪个看客户端:Windows 资源管理器挂网络位置用 webdav,手机投屏用 dlna,要挂载成磁盘用 sftp。

这条能力让它不只是同步工具。一台没有界面的机器,挂一个目录出来给别的设备取文件,一条命令解决。

几个真踩过的坑

症状原因处理
第一次跑就把目标文件删了用的是 sync 不是 copy先加 --dry-run 看计划
明明一样却重复传时间戳或大小有偏差加 --checksum
网盘同步漏文件文件名有非法字符加 --ignore-case 或改名
配置改了不生效用了别的 config 文件命令里显式 --config
端口被占上次的 serve 没退换 --addr 端口

第一条代价最大。sync 的语义是「让目标等于源」,不是「把源复制过去」。想清楚这两个词的区别再敲回车。

什么场景值得上

你的情况结论
两台机器定期对齐资料合适,一条命令加计划任务
把本地目录备份到网盘合适,支持加密和增量
要图形界面拖文件不合适,它是命令行的
要双向实时同步不合适,它按次跑,不是常驻监听
临时给同事传个目录合适,serve 一条命令起目录

它的定位是「存储之间的搬运层」。界面用别的工具,逻辑归它管。写进计划任务之后基本不用管。

要实时双向同步得换 syncthing 那类常驻进程,两者的思路不同:一个是按下就跑,一个是挂着一直跑。