文件传输和同步:我为什么更常用 rsync
cbowen

平时换电脑、备份服务器、整理照片,文件传来传去其实挺常见。小文件还好,随便丢到微信或者网盘就行;一旦文件多了、目录深了、还想定期同步,很多工具就开始不顺手。

这篇简单整理一下我用过的几类方式,以及为什么最后还是更常用 rsync


微信 / QQ

最顺手,也最容易被拿来应急。比如手机里有张图,电脑上临时要用,发给文件传输助手确实最快。

适合:

  • 临时传一两个文件
  • 手机和电脑之间随手倒东西
  • 对文件质量和目录结构没什么要求

不太适合:

  • 图片、视频可能被压缩
  • 大文件经常受限制
  • 网络断了基本就要重来
  • 不适合自动同步,也不适合做备份

所以这类工具我一般只当“临时传输”,不会把它当同步方案。


网盘

百度网盘、阿里云盘、OneDrive、iCloud、Google Drive 都属于这一类。它们最大的好处是省心:文件丢上去,换设备也能拿到。

适合:

  • 跨设备访问
  • 不急着同步的资料归档
  • 文档、图片这类相对稳定的文件

问题也很明显:

  • 速度不完全可控,有些网盘还会限速
  • 需要登录账号,迁移成本高
  • 隐私要交给平台
  • 同步什么时候开始、什么时候结束,不一定能说清楚

如果是日常资料备份,网盘可以用。但如果我要同步一个项目目录,或者把服务器上的东西定期拉回来,网盘就有点别扭。


局域网直传

LocalSend、Snapdrop、AirDrop 都是这一类。只要设备在同一个局域网里,传文件很舒服,不用登录账号,也不用先上传到第三方服务器。

适合:

  • 局域网内临时传文件
  • 手机、电脑、平板之间互传
  • 不想经过网盘中转的场景

不适合:

  • 不在同一个网络里的设备
  • 定时备份
  • 大批量目录同步

这类工具很好用,但它解决的是“传一下”,不是“持续同步”。


Syncthing

Syncthing 是真正意义上的同步工具。配置好设备和目录之后,它会自动检测文件变化,然后在设备之间同步。

我觉得它比较适合这些场景:

  • 多台个人设备之间同步一个目录
  • 不想依赖网盘
  • 希望有图形界面,少写命令

它的问题主要在冲突和控制感。比如两台设备都改了同一个文件,冲突文件会被保留下来,但后面还是要自己处理。大量文件变动的时候,也容易感觉同步队列有点乱。

Syncthing 更像“让几个设备保持一致”。如果我要做一次明确的复制、备份、部署,它反而不是我最想用的工具。


rsync

rsync 的优点不是界面漂亮,而是行为很明确。我要把哪个目录同步到哪里,要不要删除目标端多余文件,要不要压缩,要不要显示进度,都可以写在命令里。

我常用它主要因为几点:

  • 只传变化的内容,重复同步很快
  • 可以走 SSH,远程服务器也方便
  • 命令可以放进脚本或 cron
  • 行为可控,出了问题也比较好排查

它当然也有缺点:需要记命令,第一次用容易被路径结尾的 / 绕一下,--delete 用错还可能删东西。所以我一般会先加 --dry-run 看一眼。

几个常用命令:

1
2
3
4
5
6
7
8
9
10
11
# 本地目录同步到远程服务器
rsync -avz ./local/ user@remote:/home/user/backup/

# 本地文件夹之间同步(跳过不变的文件)
rsync -a --delete ./source/ ./destination/

# 带进度条和压缩
rsync -avz --progress ./source/ user@remote:/data/

# 先演练,不真正修改目标目录
rsync -avz --delete --dry-run ./source/ ./destination/

这里有个细节很重要:

1
2
rsync -a ./source/ ./destination/
rsync -a ./source ./destination/

第一条同步的是 source 目录里的内容;第二条会把 source 这个目录本身放进 destination。这个差别第一次很容易踩坑。


怎么选

使用场景 推荐方式
临时、小文件、跨设备手动传 微信 / QQ / LocalSend
云端存储、轻同步 网盘
实时局域网同步 Syncthing
自动化、远程备份、大文件传输 rsync

我的习惯是:临时传文件用 LocalSend 或微信;多设备自动同步用 Syncthing;只要涉及服务器、备份、定时任务,基本就用 rsync

小结

rsync 没有那么“现代”,也不适合完全不想碰命令行的人。但它足够稳定,也足够清楚。尤其是做备份和远程同步时,我更愿意用一个可预测的命令,而不是把同步过程交给一个看不见调度逻辑的客户端。

对我来说,这就是 rsync 最值钱的地方。

 评论
评论插件加载失败
正在加载评论插件