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
4.--delete 参数,
删除只存在于目标目录、不存在于源目录的文件
1
$ rsync -av --delete source/ destination
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。那些没变动的文件则会生成硬链接。这个命令的第一次备份时是全量备份,后面就都是增量备份了。