rsync常用命令快速上手

  1. 复制远程文件到本地
1
rsync -avzP <远程主机IP>:<远程主机上的路径> <本地主机上的路径>

注意路径末尾的 /, 源末尾带 / 表示复制文件夹的内容而不是文件夹本身, 相当于少了一层. 目标末尾带 / 或者不带没有区别.

-a: archive mode, 尽量保留文件的各种属性

-v: 详细模式

-z: 压缩

-P: 显示进度

当传输不稳定时(导致ssh会话断开), 由于rsync默认会先创建临时文件并写入, 待同步完成后再重命名到目标文件, 当链接断开时远端rsync over ssh session可能还在继续运行, 因此还没有将临时文件重命名为目标文件, 此时再次发起同步会发现并没有续传而是重传了. 一种简单的解决办法是使用 --inplace 参数跳过rsync的这套机制, 直接创建目标名称文件且就地更新.

  1. 排除文件

例如仅同步 mp4 文件, 不处理其他任何文件.

1
rsync -avzP --include '*.mp4' --exclude '*' ...
  1. rsync daemon

在不能运行 ssh server 的时候 (比如WSL 1) 可以使用 rsync daemon, 通信不加密但在相对安全的内网环境下还算好用

需要先写一个最简单的配置文件 rsync.conf

1
2
3
4
5
6
7
port = 12000

[files]
path = <要分享的文件夹的绝对路径>
comment = SHARED LOCAL FILES
read only = true
timeout = 300

然后启动 rsync 服务器. 强制前台, 指定配置文件, 输出日志到控制台.

1
rsync --daemon --no-detach --config rsync.conf --log-file=/dev/stdout
  1. 客户端连接至 rsync daemon

客户端列出服务端分享了哪些文件

1
rsync -rdt rsync://<主机IP>:12000

会有类似这样的显示:

1
files        SHARED LOCAL FILES

同步文件方法与基于ssh链接使用方法一致:

1
rsync -avzP rsync://<远程主机IP>:<远程主机上的路径>/files/ <本地路径>

参考

rsync manpage

rsync tutorial

How to Set Up an Rsync Daemon on Your Linux Server