0%

[linux] 11. rsnyc 万能的文件复制指令

what is rsnyc#

rsync 其实就是"远程同步"(remote sync)的意思, rsync 区别于FTP or scp的最大特点是会 检查发送方和接收方已有的文件,仅传输有变动的部分

它可以在本地计算机与远程计算机之间,或者两个本地目录之间同步文件, 可替代cp和mv命令。

基本用法#

1.-r 参数,表示递归(包括子目录)

1
$ rsync -r source destination

若有多个文件或目录需要同步

1
$ rsync -r source1 source2 destination

2.-a 参数, 可以替代-r, 还可以同步元信息(比如修改时间、权限等) 由于 rsync 默认使用文件大小和修改时间决定文件是否需要更新,所以-a比-r更有用

3.-n 参数, 模拟执行的结果

1
$ rsync -anv source/ destination
-n参数模拟命令执行的结果,并不真的执行命令。-v参数则是将结果输出到终端,这样就可以看到哪些内容会被同步

4.--delete 参数, 删除只存在于目标目录、不存在于源目录的文件

1
$ rsync -av --delete source/ destination
--delete参数会使得destination成为source的一个镜像

5.--exclude 参数, 同步时排除某些文件或目录

排除了所有 TXT 文件

1
2
3
$ rsync -av --exclude='*.txt' source/ destination
# 或者
$ rsync -av --exclude '*.txt' source/ destination

要排除某个目录里面的所有文件,但不希望排除目录本身

1
$ rsync -av --exclude 'dir1/*' source/ destination

多个排除模式,可以用多个--exclude参数。

1
2
3
$ rsync -av --exclude 'file1.txt' --exclude 'dir1/*' source/ destination
或者
$ rsync -av --exclude={'file1.txt','dir1/*'} source/ destination

6.--include 参数,指定必须同步的文件模式

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

7.SSH 协议远程同步 将本地内容,同步到远程服务器

1
$ rsync -av source/ username@remote_host:destination

将远程内容同步到本地

1
$ rsync -av username@remote_host:source/ destination

如果 ssh 命令有附加的参数,则必须使用-e参数指定所要执行的 SSH 命令

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

8.增量备份

rsync 的最大特点就是它可以完成增量备份,也就是默认只复制有变动的文件。

除了源目录与目标目录直接比较,rsync 还支持使用基准目录,即将源目录与基准目录之间变动的部分,同步到目标目录。 第一次同步是全量备份,所有文件在基准目录里面同步一份。以后每一次同步都是增量备份,只同步源目录与基准目录之间有变动的部分,将这部分保存在一个新的目标目录。这个新的目标目录之中,也是包含所有文件,但实际上,只有那些变动过的文件是存在于该目录,其他没有变动的文件都是指向基准目录文件的硬链接。

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

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

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

reference#

  1. rsync 用法教程