使用 rsync 将本地文档同步至服务器

本文简要介绍了 rsync 的用法以及如何将本地文档同步至服务器。

rsync 简介

rsync 是一个用于同步文件系统的命令行工具,既可用于同步本地文件也可将本地文件系统同步至服务器。rsync 在同步文件系统时,会首先对比源目录与目标目录下各文件的最后修改时间,并只将源目录中更新过的文件同步至目标目录。因此 rsynccprcp 的升级替代。

rsync 基础用法

rsync 一般用于同步文件系统,所以该命令通常带参数 -a 运行。参数 -acprcp 命令中 -r 参数的升级版:递归同步并保留符号链接、特殊文件和设备文件、修改时间、组、所有者和权限等。

rsync 最基础的用法为:

1
rsync -a dir0 dir1

该命令会将在 dir1 目录下创建一个完全相同的 dir0 目录,同样若 dir1 目录不存在则自动创建。

1
rsync -a dir0/ dir1

该命令会将 dir0 目录下的所有文件结构同步至 dir1 目录,若 dir1 目录不存在则自动创建,得到的 dir1 目录将于 dir0 目录完全一致。

作为同步源的 dir0 目录:

  • 不带斜杠 / 的写法 dir0 表示:将 dir0 整个目录同步至 dir1 目录之下;
  • 带斜杠 / 的写法 dir0/ 表示:将 dir0 目录下的所有内容同步至 dir1 目录之下。

作为同步目标的 dir1 目录:

  • dir1dir1/ 两种形式并无区别。

一个示例

此处给出一个具体示例帮助理解。

1
2
3
mkdir dir0
touch dir0/file{1..10}
ls *

输出结果为:

1
2
dir0:
file1  file10 file2  file3  file4  file5  file6  file7  file8  file9

采用不同方式同步 dir0 目录:

1
2
3
4
5
rsync -a dir0 dir1
rsync -a dir0 dir2/
rsync -a dir0/ dir3
rsync -a dir0/ dir4/
ls *

输出结果为:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
dir0:
file1  file10 file2  file3  file4  file5  file6  file7  file8  file9

dir1:
dir0

dir2:
dir0

dir3:
file1  file10 file2  file3  file4  file5  file6  file7  file8  file9

dir4:
file1  file10 file2  file3  file4  file5  file6  file7  file8  file9

rsync 常用参数组合

预览同步

1
rsync -anv dir0/ dir1

参数 -n--dry-run ,可预览即将进行的同步操作,但不会实际进行任何文件操作;参数 -v 可显示详细操作步骤,用以配合 -n

同步删除

1
rsync -anv dir0/ dir1 --delete

默认情况下,即使源目录下某些文件已经被删除,rsync 也不会删除目标目录下的任何文件。若要同步删除目标目录下的相应文件,可附加 --delete 参数。

注意,在使用 --delete 参数时,请务必先配合使用 -nv 参数预览同步操作结果,确保没有误删除其他文件后再执行同步删除。

同步备份

指定备份存放目录

1
rsync -anv dir0/ dir1 --delete --backup --backup-dir=dir1-backup

rsync 会在目标目录中新建 dir1-backup 目录,并将目标目录中因同步操作被更新或删除的原始文件移动到 dir1-backup 目录中,而不是直接删除原始文件。

1
2
3
rm dir0/file10
rsync -a dir0/ dir3 --delete --backup --backup-dir=dir3-backup
ls dir0 dir3 dir3/dir3-backup

输出结果为:

1
2
3
4
5
6
7
8
dir0:
file1 file2 file3 file4 file5 file6 file7 file8 file9

dir3:
dir3-backup file1 file2 file3 file4 file5 file6 file7 file8 file9

dir3/dir3-backup:
file10

不指定备份存放目录

1
rsync -anv dir0/ dir1 --delete --backup

若不指定备份存放目录,rsync 则会将目标目录中因同步操作被更新或删除的原始文件的文件名后添加 ~ 标记,并存放在目标目录 dir1 下,而不是直接删除原始文件。

1
2
3
touch dir0/file9
rsync -a dir0/ dir4 --delete --backup
ls dir0 dir4

输出结果为:

1
2
3
4
5
dir0:
file1 file2 file3 file4 file5 file6 file7 file8 file9

dir4:
file1 file10~ file2 file3 file4 file5 file6 file7 file8 file9 file9~

压缩和断点续传

1
rsync -azP dir0/ dir1

参数 -z 可压缩文件以降低网络传输数据量;参数 -P 为参数 --progress--partial 的组合,前者显示数据传输进度条,后者可实现断点续传。

rsync 同步服务器

上传

1
rsync -azP ~/dir0/ username@remote_host:~/dir1

下载

1
rsync -azP username@remote_host:~/dir0/ ~/dir1

SSH密钥

1
rsync -azP -e "ssh -i /path/to/SSHKey" ~/dir0/ username@remote_host:~/dir1

rsync 同步 Hugo 网站至服务器

1
2
rsync -anv -e "ssh -i /path/to/SSHKey" public/ username@remote_host:~/mysite/ --delete
rsync -azP -e "ssh -i /path/to/SSHKey" public/ username@remote_host:~/mysite/ --delete --backup --backup-dir=../BK-20230204

先预览同步操作,确认无误后备份并同步。备份存储目录是同步目标目录下的相对路径。


参考资料:

0%