Files
rikako-note/linux/rsync.md
2024-08-03 11:11:42 +08:00

79 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Rsync
Rsync是一个灵活的网络同步工具。其可以用于在多台unix机器间增量同步文件也可以用于系统备份。
## Syntax
### 在本地进行文件同步
当想要在本地目录之间进行文件同步时,可以调用如下形式的命令:
```shell
rsync -r dir1/ dir2
```
`-r`选项代表递归的对dir目录下的文件进行备份当需要对目录进行同步时该选项是必须的。
除了指定`-r`选项外,还可以指定`--archive | -a`选项该选项是一个组合选项archive mode代表`-rlptgoD`。指定`-a`选项后该选项会递归的同步文件并且保存符号链接、device文件、文件mtime、group信息、owner信息、权限信息。该选项比`-r`选项使用的更频繁,并且是推荐使用的选项。使用示例如下:
```shell
# 第一个目录参数中指定了`/`符号如果没有指定该符号那么dir目录本身
# 也会被放到dir2中同步后dir2中文件结构则是dir2/dir1/[files]
rsync -a dir1/ dir2
```
另外在使用rsync时可以指定`-n`或是`--dry-run`选项指定该选项后执行命令时并不会实际执行修改操作该选项只是执行一个trail run通常和`-v`选项一起使用,查看实际执行时会造成那些修改。使用示例如下:
```shell
rsync -anv dir1/ dir2
```
### 同步到远程服务器
如果要通过rsync向远程服务器同步数据只需要拥有远程服务器的ssh访问权限即可同时需要本地和远程都安装有rsync。
当向远程服务器同步文件时,其语法如下:
```shell
rsync -a ~/dir1 username@remote_host:destination_directory
```
上述命令为push模式其主动将本地文件同步到远程目录中。
还可以使用pull模式从远程服务器中同步文件到本地其命令如下
```shell
rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
```
### 使用Rsync的其他选项
#### `-z`
如果在通过rsync传输文件时可以通过指定`-z`选项来在传输文件时添加对文件的压缩来减少传输带宽:
```shell
rsync -az source destination
```
#### `--partial`
默认情况下当传输被中断时rsync会删除只传输了部分的文件。当指定了`--partial`选项时rsync会对部分传输的文件进行保留下次传输时就只用传输缺失的部分能够减少下次传输时间。
#### `-P`
`-P`选项组合了`--progress``--partial`两个选项。第一个选项提供了一个传输文件的进度条,而第二个选项则是允许对中断的传输进行恢复操作。
```shell
rsync -azP source destination
```
#### `--delete`
默认情况下rsync在同步文件时如果source目录中移除了某文件同步文件后target目录中该文件并不会被同步移除。通过指定`--delete`选项可以同步移除target目录中的文件。
#### `--exclude`
如果在同步文件时想要抛出source目录内某些目录或是文件可以在`--exclude`中指定排除的pattern。在想要排除多个路径时既可以指定多个`--exclude`选项,也可以在一个`--exclude`选项中指定多个模式多个pattern之间通过`,`分割,首尾符号为`{``}`:
```shell
rsync -aPznv --delete --exclude={"fiels0","fiels1"} dir1/ dir2
```
#### `--include`
可以使用`--include`来覆盖`--exclude`的排除操作,示例如下:
```shell
rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination
```
#### `--backup`
rsync的`--backup`选项可以用于存储文件的备份。该选项和`--backup-dir`选项联合使用,用于指定备份文件的存储路径。
--backup选项会将文件备份在target根路径下`backup-dir`路径指定的位置。并且只有本次rsync操作增量同步的文件才会存储在`backup-dir`中。
```shell
rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination
```
#### `--link-dest`
rsync的`--link-dest`选项可用于对内容进行增量同步