使用 Rsync 与 Syncthing 实现文件同步

前言

在本科毕业以后,手里的设备变多了,同时也需要在多台设备操作同一文件。这便引出新的问题:我需要以一种合适的方式在多台设备间同步文件。

举个例子,本科期间我的主力机是台笔记本,Windows 系统;毕业以后配了台式机,Arch Linux 系统;现在实验室那边也给整了台电脑,Windows 系统;同时手机(Android 系统)存储经常在满的边缘徘徊,需要不定期清理。

我的文件同步方案的需求如下:

  • 足够简单;
  • 自动同步,也可以手动同步;
  • 可作为备份工具;
  • 拒绝网盘类软件;
  • 可以像以前的公文包那样不经过网络同步。

转了一圈,我看向了两款工具:一种是 Linux 标配的 Rsync,另一种是跨平台的 Syncthing。

Rsync 实现文件同步

Rsync 概述

Rsync 是一个常用的 Linux 应用程序,可以在本地计算机与远程计算机之间,或者两个本地目录之间同步文件(但不支持两台远程计算机之间的同步),也可以当作文件复制工具,替代cpmv命令。Rsync 的最大特点是会检查发送方和接收方已有的文件,仅传输有变动的部分(默认规则是文件大小或修改时间有变动)[1]

Rsync 安装

一般 Linux 发行版都会标配这个工具,如果没安装也可以通过包管理器或者自行编译安装。
但在 Windows 系统,就得考虑些歪门邪道了(bushi)。

目前我认为合适的方案 [2]

  • Cygwin 等兼容层,但我更推荐Msys2,或者也可以试试在 Git Bash 里装;
  • WSL;
  • 干脆不用。

Rsync 使用

Rsync 有众多参数,我这边最常用的参数:

  • --verbose -v:将结果输出到终端。
  • --archive -a:递归同步 & 同步元信息(修改时间、权限等)。
  • --update -u:若目标文件更新,则跳过该文件。
  • --dry-run -n:模拟执行。

比如我想进行本地文件夹的双向同步(类似于先git pullgit push),可以输入以下命令,注意斜杠:

1
2
rsync -auv remote/ local  # like git pull
rsync -auv local/ remote # like git push

这玩意儿优点就是简单,也可以远程同步,缺点是得手动,需要自己想办法实现自动同步。

Syncthing 实现文件同步

Syncthing 概述

Syncthing 是一个轻量级的点对点文件同步系统,速度很快,最重要的是支持 NAT 穿透 [3]

Syncthing 安装

这里

注意:安装后需要自行配置服务,过程见下面的链接。
Windows 可以在安装程序决定是否启动服务,反正我是选择手动。

Syncthing 使用

这篇文章详细地讲述了 Syncthing 配置过程,可惜纯英文。

简单来说就是:

  • 启动后打开 Web-GUI:http://localhost:8384
  • 分别设置并添加设备 ID、文件夹 ID、文件夹路径、相关参数等;
  • 根据网页说明进行配置。

Syncthing Web-GUI截图

第一次用会费点时间,配置好了就能自动同步了。
我太懒了,你可以搜搜别的教程。

总结

目前我用 Rsync 进行本地文件夹的同步,用 Syncthing 通过网络对不同设备的文件夹进行同步和备份,真的太爽了。

参考


使用 Rsync 与 Syncthing 实现文件同步
https://blog.fqilin.top/rsync-and-syncthing/
作者
F_Qilin
发布于
2024年5月10日
许可协议