# 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 ```