- 复制远程文件到本地
1 | rsync -avzP <远程主机IP>:<远程主机上的路径> <本地主机上的路径> |
注意路径末尾的 /
, 源末尾带 /
表示复制文件夹的内容而不是文件夹本身, 相当于少了一层. 目标末尾带 /
或者不带没有区别.
-a
: archive mode, 尽量保留文件的各种属性
-v
: 详细模式
-z
: 压缩
-P
: 显示进度
当传输不稳定时(导致ssh会话断开), 由于rsync默认会先创建临时文件并写入, 待同步完成后再重命名到目标文件, 当链接断开时远端rsync over ssh session可能还在继续运行, 因此还没有将临时文件重命名为目标文件, 此时再次发起同步会发现并没有续传而是重传了. 一种简单的解决办法是使用 --inplace
参数跳过rsync的这套机制, 直接创建目标名称文件且就地更新.
- 排除文件
例如仅同步 mp4
文件, 不处理其他任何文件.
1 | rsync -avzP --include '*.mp4' --exclude '*' ... |
- rsync daemon
在不能运行 ssh server 的时候 (比如WSL 1) 可以使用 rsync daemon, 通信不加密但在相对安全的内网环境下还算好用
需要先写一个最简单的配置文件 rsync.conf
1 | port = 12000 |
然后启动 rsync 服务器. 强制前台, 指定配置文件, 输出日志到控制台.
1 | rsync --daemon --no-detach --config rsync.conf --log-file=/dev/stdout |
- 客户端连接至 rsync daemon
客户端列出服务端分享了哪些文件
1 | rsync -rdt rsync://<主机IP>:12000 |
会有类似这样的显示:
1 | files SHARED LOCAL FILES |
同步文件方法与基于ssh链接使用方法一致:
1 | rsync -avzP rsync://<远程主机IP>:<远程主机上的路径>/files/ <本地路径> |