平时换电脑、备份服务器、整理照片,文件传来传去其实挺常见。小文件还好,随便丢到微信或者网盘就行;一旦文件多了、目录深了、还想定期同步,很多工具就开始不顺手。
这篇简单整理一下我用过的几类方式,以及为什么最后还是更常用 rsync。
微信 / QQ
最顺手,也最容易被拿来应急。比如手机里有张图,电脑上临时要用,发给文件传输助手确实最快。
适合:
- 临时传一两个文件
- 手机和电脑之间随手倒东西
- 对文件质量和目录结构没什么要求
不太适合:
- 图片、视频可能被压缩
- 大文件经常受限制
- 网络断了基本就要重来
- 不适合自动同步,也不适合做备份
所以这类工具我一般只当“临时传输”,不会把它当同步方案。
网盘
百度网盘、阿里云盘、OneDrive、iCloud、Google Drive 都属于这一类。它们最大的好处是省心:文件丢上去,换设备也能拿到。
适合:
- 跨设备访问
- 不急着同步的资料归档
- 文档、图片这类相对稳定的文件
问题也很明显:
- 速度不完全可控,有些网盘还会限速
- 需要登录账号,迁移成本高
- 隐私要交给平台
- 同步什么时候开始、什么时候结束,不一定能说清楚
如果是日常资料备份,网盘可以用。但如果我要同步一个项目目录,或者把服务器上的东西定期拉回来,网盘就有点别扭。
局域网直传
LocalSend、Snapdrop、AirDrop 都是这一类。只要设备在同一个局域网里,传文件很舒服,不用登录账号,也不用先上传到第三方服务器。
适合:
- 局域网内临时传文件
- 手机、电脑、平板之间互传
- 不想经过网盘中转的场景
不适合:
- 不在同一个网络里的设备
- 定时备份
- 大批量目录同步
这类工具很好用,但它解决的是“传一下”,不是“持续同步”。
Syncthing
Syncthing 是真正意义上的同步工具。配置好设备和目录之后,它会自动检测文件变化,然后在设备之间同步。
我觉得它比较适合这些场景:
- 多台个人设备之间同步一个目录
- 不想依赖网盘
- 希望有图形界面,少写命令
它的问题主要在冲突和控制感。比如两台设备都改了同一个文件,冲突文件会被保留下来,但后面还是要自己处理。大量文件变动的时候,也容易感觉同步队列有点乱。
Syncthing 更像“让几个设备保持一致”。如果我要做一次明确的复制、备份、部署,它反而不是我最想用的工具。
rsync
rsync 的优点不是界面漂亮,而是行为很明确。我要把哪个目录同步到哪里,要不要删除目标端多余文件,要不要压缩,要不要显示进度,都可以写在命令里。
我常用它主要因为几点:
- 只传变化的内容,重复同步很快
- 可以走 SSH,远程服务器也方便
- 命令可以放进脚本或 cron
- 行为可控,出了问题也比较好排查
它当然也有缺点:需要记命令,第一次用容易被路径结尾的 / 绕一下,--delete 用错还可能删东西。所以我一般会先加 --dry-run 看一眼。
几个常用命令:
1 | # 本地目录同步到远程服务器 |
这里有个细节很重要:
1 | rsync -a ./source/ ./destination/ |
第一条同步的是 source 目录里的内容;第二条会把 source 这个目录本身放进 destination。这个差别第一次很容易踩坑。
怎么选
| 使用场景 | 推荐方式 |
|---|---|
| 临时、小文件、跨设备手动传 | 微信 / QQ / LocalSend |
| 云端存储、轻同步 | 网盘 |
| 实时局域网同步 | Syncthing |
| 自动化、远程备份、大文件传输 | rsync |
我的习惯是:临时传文件用 LocalSend 或微信;多设备自动同步用 Syncthing;只要涉及服务器、备份、定时任务,基本就用 rsync。
小结
rsync 没有那么“现代”,也不适合完全不想碰命令行的人。但它足够稳定,也足够清楚。尤其是做备份和远程同步时,我更愿意用一个可预测的命令,而不是把同步过程交给一个看不见调度逻辑的客户端。
对我来说,这就是 rsync 最值钱的地方。