服务器 同步文件夹
同步文件夹
@rebofiles/sync 让磁盘上的文件夹与网盘中的文件夹保持一致。每次运行都会列出两边,并与上次一致时的状态比较,从而知道是哪一边发生了更改。本页内容
在桌面应用中
Server → Sync a Folder…(⇧⌘S)会询问要同步的文件夹(默认 ~/ReboFiles),并在窗口打开期间保持同步:启动时、网盘告知更改时、窗口回到前台时,以及每半分钟一次。底部的标签显示同步结果。磁盘由应用自己的命令读写,这些命令不会离开该文件夹。
作为命令
在任何装有 Node 的电脑上,也可作为服务运行。
npx rebofiles-sync ~/ReboFiles --server https://app.example.com/api/files --token "$TOKEN"
npx rebofiles-sync ./Clients --server … --folder <id of a folder of the drive> --once在你的代码中
import { createDriveClient } from '@rebofiles/drive';
import { watchSync } from '@rebofiles/sync';
const client = createDriveClient({ base: 'https://app.example.com/api/files', headers: () => ({ authorization: `Bearer ${token}` }) });
const sync = watchSync({ client, folder: '/Users/ana/ReboFiles', onAction: (action) => console.log(action) });
// sync.stop()它做什么
| 情况 | 处理 |
|---|---|
| 一边新增 | 在另一边创建:文件夹,或发送、取回文件。 |
| 一边更改 | 在网盘中生成新版本,或重新写入磁盘上的文件。 |
| 两边都更改 | 网盘的版本保留原名;磁盘的版本放在旁边,命名为“名称 (conflict 2026-10-26 14.05).ext”,并作为单独的文件上传。 |
| 磁盘上已删除 | 移入网盘回收站(可恢复);若此后网盘中有更改,则重新取回。 |
| 网盘中已删除 | 在磁盘上移到 .rebofiles/removed/;若此后磁盘上有更改,则重新上传。 |
| 在网盘中移动或重命名 | 在磁盘上移动,文件夹连同其内容一起。 |
| 在磁盘上移动文件 | 在网盘中移动,仍是同一个文件及其版本,按大小和时间识别。 |
它不做什么
- 在磁盘上重命名的文件夹会作为新文件夹重新上传,旧文件夹移入回收站:文件相同,但版本从头开始。
- 原本有文件的磁盘文件夹变为空时,会被视为磁盘不在,直到明确允许(allowEmpty)之前不做任何操作。
- 系统文件(.DS_Store、Thumbs.db、Office 的 ~$ 文件)以及它自己的 .rebofiles 文件夹不会同步。
- 每次都会传输整个文件,而不只是更改的部分。
只传输更改的部分
稍有改动的文件只以更改的部分作为新版本上传:每个版本保存其 8 MiB 分块的 SHA-256,相同的分块直接在存储中从上一个版本复制(S3 的 UploadPartCopy,或磁盘上的复制),不再重新发送。一个 1 GB 的视频只改了标题,只需发送 8 MiB。任何上传都可以通过 partHashes: true 使用此功能。