rsync
是 Linux 和类 Unix 系统中一个强大的命令行工具,用于快速、高效地同步文件和目录。它支持本地同步、远程同步,并且可以增量传输文件(仅传输更改的部分),从而提高效率。rsync
常用于文件备份、远程复制以及数据迁移。
基本语法
- 源路径:需要同步的文件或目录。
- 目标路径:同步的目标位置,可以是本地路径或远程路径。
- 远程路径格式:
user@host:path
。
常用选项
选项 |
功能 |
-a |
归档模式,递归传输,并保留文件权限、时间戳、符号链接等(常用)。 |
-v |
显示详细信息(verbose)。 |
-z |
在传输过程中压缩数据(适用于网络传输)。 |
-r |
递归传输目录(包含子目录和文件)。 |
-u |
仅更新文件(如果目标文件更新日期较新,则跳过)。 |
-t |
保留文件的时间戳。 |
-p |
保留文件权限。 |
--progress |
显示同步的详细进度信息。 |
--delete |
删除目标路径中源路径中不存在的文件(保持两端完全同步)。 |
--exclude |
排除指定文件或目录(如 --exclude '*.log' 排除所有 .log 文件)。 |
--include |
包含指定文件或目录(与 --exclude 结合使用)。 |
--dry-run |
模拟执行命令,不真正传输文件(用于测试)。 |
-e |
指定远程连接使用的加密协议(如 ssh )。 |
常用操作和示例
本地文件同步
将目录 /source/path
同步到 /destination/path
:
1
| rsync -av /source/path /destination/path
|
- 选项解释:
-a
:归档模式,保留文件属性。
-v
:显示详细信息。
- 注意:
- 如果源路径以斜杠
/
结尾(如 /source/path/
),只同步目录内的内容。
- 如果没有斜杠(如
/source/path
),则整个目录包括其内容都会同步。
示例:
1 2 3 4 5
| rsync -av /home/user/docs/ /backup/docs/
rsync -av /home/user/docs /backup/
|
远程文件同步
从本地同步到远程
1
| rsync -av /local/path/ user@remote_host:/remote/path/
|
- 将本地的
/local/path/
同步到远程主机的 /remote/path/
。
从远程同步到本地
1
| rsync -av user@remote_host:/remote/path/ /local/path/
|
- 将远程主机的
/remote/path/
同步到本地的 /local/path/
。
压缩传输
- 使用
-z
选项可以在传输过程中压缩数据以提高传输效率:1
| rsync -avz /local/path/ user@remote_host:/remote/path/
|
显示同步进度
- 使用
--progress
查看每个文件的传输进度:1
| rsync -av --progress /source/path/ /destination/path/
|
删除目标中多余的文件
- 使用
--delete
选项,可以删除目标路径中不存在于源路径的文件:1
| rsync -av --delete /source/path/ /destination/path/
|
注意:
- 使用
--delete
前建议加上 --dry-run
进行模拟测试,避免意外删除:1
| rsync -av --delete --dry-run /source/path/ /destination/path/
|
排除文件或目录
- 使用
--exclude
排除特定文件或目录:1
| rsync -av --exclude '*.log' /source/path/ /destination/path/
|
排除多个文件/目录:
1
| rsync -av --exclude 'tmp/' --exclude '*.log' /source/path/ /destination/path/
|
排除和包含结合:
1
| rsync -av --exclude '*.tmp' --include '*.txt' /source/path/ /destination/path/
|
仅更新文件
- 使用
-u
选项,只同步更新的文件(目标文件较新时不覆盖):1
| rsync -avu /source/path/ /destination/path/
|
测试同步(模拟执行)
- 使用
--dry-run
模拟执行命令,不真正传输文件:1
| rsync -av --dry-run /source/path/ /destination/path/
|
使用 SSH 远程同步
限制传输带宽
- 使用
--bwlimit
限制传输速度(单位为 KB/s):1
| rsync -av --bwlimit=1000 /source/path/ /destination/path/
|
同步符号链接和特殊文件
- 默认情况下,
rsync
会同步符号链接而不是目标文件。如果需要同步符号链接,可以使用:1
| rsync -av --links /source/path/ /destination/path/
|
增量备份
- 使用
--backup
和 --backup-dir
创建增量备份:1
| rsync -av --backup --backup-dir=/backup/incremental /source/path/ /backup/full/
|
常见用法总结
用法 |
命令示例 |
本地目录同步 |
rsync -av /source/path/ /destination/path/ |
远程同步到本地 |
rsync -av user@remote_host:/remote/path/ /local/path/ |
本地同步到远程 |
rsync -av /local/path/ user@remote_host:/remote/path/ |
显示进度 |
rsync -av --progress /source/path/ /destination/path/ |
删除目标中多余文件 |
rsync -av --delete /source/path/ /destination/path/ |
排除文件/目录 |
rsync -av --exclude 'tmp/' /source/path/ /destination/path/ |
使用 SSH 同步 |
rsync -av -e ssh /source/path/ user@remote_host:/remote/path/ |
模拟运行(测试) |
rsync -av --dry-run /source/path/ /destination/path/ |
增量备份 |
rsync -av --backup --backup-dir=/backup/incremental /source/path/ /backup/full/ |
rsync
的优点
- 增量传输:仅传输更改的部分,节省带宽。
- 支持多种协议:支持本地和远程同步,远程同步可以通过 SSH 进行安全传输。
- 高效:支持压缩传输和快速文件对比。
- 灵活的选项:可以排除特定文件、删除多余文件等。
注意事项
-
斜杠区别:
- 源路径 带斜杠:仅同步目录内容。
- 源路径 不带斜杠:同步整个目录及其内容。
-
小心使用 --delete
:
--delete
会删除目标路径中多余的文件,建议先使用 --dry-run
测试。
-
权限问题:
- 如果需要保留文件的权限、所有者等属性,可能需要使用
sudo
。
总结
rsync
是一个功能强大且高效的工具,适用于本地和远程的文件同步和备份。通过灵活的选项组合,rsync
能满足多种文件传输需求。熟练掌握 rsync
的用法,可以大大提高数据同步和备份的效率。