ReboFiles文档
开始3
什么是 ReboFiles
快速开始
可运行的演示
集成到你的应用6
React 组件
Headless:你自己的界面
不使用框架
样式与主题
键盘与无障碍
语言
文件9
上传
预览与查看器
搜索
实时更改与大文件夹
评论
星标与字段
版本、回收站与空间
打包下载 .zip
Word 文档
服务器14
路由
框架与登录
谁可以做什么
存储:S3、GCS、Azure 与磁盘
检查上传
元数据:SQLite 与 Postgres
数据库结构
共享与链接
动态与通知
钩子、日志与限制
保留、法律保留与导出
桌面端与其他来源
同步文件夹
上线生产环境
协作1
AI 助手(MCP)
参考5
包
组件与 hooks
客户端 API
HTTP 路由
状态与路线图
↑↓ 移动↵ 打开Esc 关闭38 个页面

服务器 同步文件夹

同步文件夹

@rebofiles/sync 让磁盘上的文件夹与网盘中的文件夹保持一致。每次运行都会列出两边,并与上次一致时的状态比较,从而知道是哪一边发生了更改。
桌面

在桌面应用中

Server → Sync a Folder…(⇧⌘S)会询问要同步的文件夹(默认 ~/ReboFiles),并在窗口打开期间保持同步:启动时、网盘告知更改时、窗口回到前台时,以及每半分钟一次。底部的标签显示同步结果。磁盘由应用自己的命令读写,这些命令不会离开该文件夹。

CLI

作为命令

在任何装有 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
API

在你的代码中

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 使用此功能。