rsync-Linux工具小记

rsync-Linux工具小记

rsync 是一个常用的 Linux 应用程序,用于文件同步。rsync 是”远程同步”(remote sync)的意思。与其他文件传输工具(如 FTP 或 scp)不同,rsync 的最大特点是会检查发送方和接收方已有的文件,仅传输有变动的部分(默认规则是文件大小或修改时间有变动)。

它可以在本地计算机与远程计算机之间,或者两个本地目录之间同步文件(但不支持两台远程计算机之间的同步)。它也可以当作文件复制工具,替代cpmv命令。

本笔记记录一些入门参数和用法。

安装

Ubuntu下,一般来说,不是最简安装的系统应该都已经自带。

1
2
sudo apt-get update
sudo apt-get install rsync

参数用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-a 	这是归档模式,表示以递归方式传输文件,并保持所有属性,它等同于-r、-l、-p、-t、-g、-o、-D 选项。-a 选项后面可以跟一个 --no-OPTION,表示关闭 -r、-l、-p、-t、-g、-o、-D 中的某一个,比如-a --no-l 等同于 -r、-p、-t、-g、-o、-D 选项。
-r 表示以递归模式处理子目录,它主要是针对目录来说的,如果单独传一个文件不需要加 -r 选项,但是传输目录时必须加。
-v 表示打印一些信息,比如文件列表、文件数量等。
-l 表示保留软连接。
-L 表示像对待常规文件一样处理软连接。如果是 SRC 中有软连接文件,则加上该选项后,将会把软连接指向的目标文件复制到 DEST。
-p 表示保持文件权限。
-o 表示保持文件属主信息。
-g 表示保持文件属组信息。
-D 表示保持设备文件信息。
-t 表示保持文件时间信息。
--delete 表示删除 DEST 中 SRC 没有的文件。
--exclude=PATTERN 表示指定排除不需要传输的文件,等号后面跟文件名,可以是通配符模式(如 *.txt)。
--progress 表示在同步的过程中可以看到同步的过程状态,比如统计要同步的文件数量、 同步的文件传输速度等。
-u 表示把 DEST 中比 SRC 还新的文件排除掉,不会覆盖。
-z 加上该选项,将会在传输过程中压缩。
-n 模拟运行,相当于测试。

用法示例

-r

-r表示递归(recursion),即包含子目录。

1
rsync -r source destination

-a

这是归档模式,表示以递归方式传输文件,并保持所有属性,它等同于-r、-l、-p、-t、-g、-o、-D 选项。-a 选项后面可以跟一个 –no-OPTION,表示关闭 -r、-l、-p、-t、-g、-o、-D 中的某一个,比如-a –no-l 等同于 -r、-p、-t、-g、-o、-D 选项。

比-r常用,一般直接用-a

1
rsync -a source destination

如在 source 后加 / ,即 source/ 则表示只同步源目录的内容到目标目录,不是整个文件夹都同步。如果不加,则会在 destination 下添加整个 source 目录,结构则为 destination/source

-n

-n参数模拟命令执行的结果,并不真的执行命令。可以加上 -v 查看输出结果。

1
rsync -anv source destination

–delete

默认情况下,rsync 只确保源目录的所有内容(明确排除的文件除外)都复制到目标目录。它不会使两个目录保持相同,并且不会删除文件。如果要使得目标目录成为源目录的镜像副本,则必须使用--delete参数,这将删除只存在于目标目录、不存在于源目录的文件。

1
rsync -a --delete source destination

上面命令中,--delete参数会使得destination成为source的一个镜像。

–exclude

有时,我们希望同步时排除某些文件或目录,这时可以用--exclude参数指定排除模式。

如:不同步所有隐藏文件。

1
rsync -a --exclude '.*' source destination

可以多次使用满足不同的排除需求;或bash大括号扩展;或逐行写入文件里,指定到该文件。

1
2
3
rsync -a --exclude '.*' --exclude '*.txt' source destination
rsync -a --exclude={'.*','*.txt'} source destination
rsync -a --exclude-from='exclude-file.txt' source destination

–include

--include参数用来指定必须同步的文件模式,往往与--exclude结合使用。

1
rsync -a --include="*.txt" --exclude='*' source/ destination

上面命令指定同步时,排除所有文件,但是会包括 TXT 文件。

同步模式

rsync支持本地同步(如上参数示例),也支持远程同步。

1
2
3
rsync -av source username@remote_host:destination
rsync -av username@remote_host:source destination
rsync -av -e 'ssh -p 2234' source/ user@remote_host:/destination

可使用 -e 指定ssh协议命令

基准同步

除上,还可以设置基准目录以同步。

rsync 还支持使用基准目录,即将源目录与基准目录之间变动的部分,同步到目标目录。

具体做法是,第一次同步是全量备份,所有文件在基准目录里面同步一份。以后每一次同步都是增量备份,只同步源目录与基准目录之间有变动的部分,将这部分保存在一个新的目标目录。这个新的目标目录之中,也是包含所有文件,但实际上,只有那些变动过的文件是存在于该目录,其他没有变动的文件都是指向基准目录文件的硬链接。

--link-dest参数用来指定同步时的基准目录。

1
rsync -a --delete --link-dest /compare/path /source/path /target/path

上面命令中,--link-dest参数指定基准目录/compare/path,然后源目录/source/path跟基准目录进行比较,找出变动的文件,将它们拷贝到目标目录/target/path。那些没变动的文件则会生成硬链接。这个命令的第一次备份时是全量备份,后面就都是增量备份了。

参考

rsync用法教程

Linux rsync命令用法详解

作者

ivy

发布于

2022-04-01

更新于

2023-03-25

许可协议

CC BY-NC-SA 4.0

评论