SyncBox 是一个高效的目录同步工具,支持实时监听文件变化并自动同步,可通过命令行直接使用或通过配置文件管理多个同步任务。
✨ 功能特点:
- ✅ 即时同步:直接指定源目录和目标目录进行一次性同步
- ✅ 任务运行:基于配置文件中的任务定义执行同步操作
- ✅ 实时监听:监控目录变化并自动触发同步,支持防抖机制
- ✅ 排除规则:可配置文件 / 目录排除模式,跳过不需要同步的内容
- ✅ 安全操作:默认不删除额外文件,支持试运行模式预览操作
- ✅ 校验选项:支持基于文件修改时间的快速同步和哈希校验的精确同步
- ✅ 详细日志:可通过环境变量控制日志级别,方便调试和问题排查
从 GitHub Releases 下载对应平台的压缩包,解压后即可使用
# 以 Linux 为例,下载并解压
curl -L https://github.com/ligang-code2020/syncbox/releases/download/v0.1.0/syncbox-linux-x86_64.tar.gz -o syncbox-linux.tar.gz
tar -zxvf syncbox-linux.tar.gz
# 赋予执行权限并全局安装
chmod +x syncbox
sudo mv syncbox /usr/local/bin/cargo install syncbox
若需基于源码二次开发或验证最新代码,可通过 Git 克隆仓库后编译:
# 1. 克隆源码仓库
git clone https://github.com/ligang-code2020/syncbox.git
cd syncbox
# 2. 编译 Release 版本(优化编译,生成的二进制体积更小、运行更快)
cargo build --release
# 3. 编译产物路径:target/release/syncbox(可直接执行或手动移动到 PATH 目录)
# 手动全局安装示例:
sudo mv target/release/syncbox /usr/local/bin/# 直接同步两个目录
# 基础用法
syncbox sync <源目录> <目标目录>
# 示例
syncbox sync ./source ./targetsyncbox run <任务名称> --config <配置文件路径>
# 示例
syncbox run documents --config ./syncbox.tomlsyncbox watch <任务名称> --config <配置文件路径> --delay <防抖延迟毫秒数>
# 示例:监听 photos 任务,防抖延迟 1000ms
syncbox watch task --config ./syncbox.toml --delay 1000# 试运行模式(仅预览操作,不实际修改文件)
syncbox sync ./source ./target --dry-run
# 使用哈希校验(更精确但速度较慢)
syncbox sync ./source ./target --checksum
# 同步时删除目标目录中源目录不存在的文件
syncbox sync ./source ./target --delete
# 同步时删除目标目录中源目录不存在的文件
syncbox sync ./source ./target --delete --delete-exclude "important.txt" # 即使--delete生效,也不删除important.txt
# 排除指定模式的文件
syncbox sync ./source ./target
--exclude "*.tmp" # 匹配所有的.tmp结尾的文件
--exclude "temp" # 匹配temp文件夹所有文件
# 显示详细操作列表
syncbox sync ./source ./target --detail
# 显示详细操作列表
syncbox sync ./source ./target --detail同步工具通过 --exclude 参数参数指定需要排除的文件或目录,规则如下:
- 基础匹配逻辑
- 支持通配符 * 匹配任意字符(如 *.log 匹配所有 .log 后缀文件)
- 路径匹配基于相对路径(相对于源目录的路径)
- 目录排除
- 不带斜杠 secret:匹配名为 secret 的文件或目录(包含子目录中的 secret)
- 带斜杠 secret/:仅匹配路径中包含 secret/ 的目录(如 secret/file.txt 或 sub/secret/file.txt)
- 绝对路径前缀匹配
- 以 / 开头的模式(如 /temp/):匹配从源目录根开始的路径(仅匹配 temp/ 目录下的内容,不匹配子目录中的 temp/)
- 系统默认排除
- 自动排除常见系统文件:.DS_Store、.fseventsd、.Trashes、.Spotlight-V100、.TemporaryItems 及 ._ 开头的文件
[[sync]]
name = "task"
source = "/xx/xx/xx/syncbox/source"
target = "/xx/xx/xx/syncbox/target"
exclude = [".log"]
delete_extra = true
delete_extra_exclude = [".DS_Store"]- name:任务名称(唯一标识)
- source:源目录路径
- target:目标目录路径
- exclude:同步时需要排除的文件 / 目录模式列表
- delete_extra:是否删除目标目录中源目录不存在的文件(默认 false)
- delete_extra_exclude:即使 delete_extra 为 true 也不删除的文件 / 目录模式列表
- 项目采用模块化设计,主要包含以下组件:
- CLI 模块:处理命令行参数解析
- 配置模块:读取和解析 TOML 配置文件
- 同步核心:实现目录扫描、文件过滤、同步逻辑
- 监听模块:监控文件系统变化并触发同步
- 基础设施:错误处理和日志系统
- ✅ 支持本地目录间的文件同步
- ✅ 实现基于配置文件的同步任务管理
- ✅ 提供实时文件监听与自动同步功能
- ✅ 支持多种同步策略(修改时间比对 / 哈希校验)
- ✅ 完善的排除规则与安全操作机制
- 基于 v0.1.0 版本进行性能优化
- 并行扫描 + 并行哈希
- 预扫描目标目录,构建HashMap缓存
- 支持并发复制
- 并行遍历 + 批量删除
- 避免多次 PathBuf 克隆和 String 分配
- 支持通过 SSH 协议进行远程目录同步
- 实现基本的远程认证机制(密码 / 密钥)
- 远程文件差异计算优化
- 支持 SFTP 协议同步
- 增加断点续传功能
- 远程同步进度显示与速度限制
- 增量同步算法优化
- 同步历史记录与版本回溯
- 多节点同步拓扑支持
- 长期目标
- 分布式文件系统支持
- 端到端加密传输
- 图形化界面客户端
- 跨平台同步冲突解决机制
本项目采用 MIT 许可证,详情参见 LICENSE 文件。