rsync 命令总结
rsync (remote sync) 是一个用于在本地或远程系统之间高效地同步文件和目录的工具。它的核心优势是使用“增量算法”,只传输源和目标之间有差异的部分,从而大大减少数据传输量。
1. 基本语法
|
- 源路径 (Source): 您要从中复制文件的地方。
- 目标路径 (Destination): 您要将文件复制到的地方。
- 源和目标都可以是本地路径,或者是
user@host:path格式的远程路径。
一个非常重要的细节:源目录末尾的斜杠 /
rsync ... source/ destination: 表示将source目录里面的内容复制到destination目录中。rsync ... source destination: 表示将source目录本身(连同文件夹一起)复制到destination目录中,最终路径会是destination/source/。- 通常,您想要的是第一种行为。
2. 常用选项 (Options)
这些选项可以组合使用,例如 -avh。
-
-a, --archive(归档模式)-
这是最常用的选项,它是一个复合选项,相当于
-rlptgoD,包含了以下所有功能:
-r, --recursive: 递归地复制目录。-l, --links: 保留符号链接。-p, --perms: 保留文件权限。-t, --times: 保留文件修改时间。-g, --group: 保留文件的所属组。-o, --owner: 保留文件的所有者 (仅在 root 用户下有效)。-D, --devices --specials: 保留设备文件和特殊文件。
-
简单来说,使用
-a就能尽可能地让目标文件和源文件一模一样。
-
-
-v, --verbose(详细模式)- 显示更详细的输出,告诉您哪些文件正在被传输。
-
-h, --human-readable(人类可读格式)- 以 KB, MB, GB 等易于阅读的单位显示文件大小。
-
--progress(显示进度)- 为每一个正在传输的文件显示详细的进度条、速度和剩余时间。对于传输大文件非常有用。
-
-n, --dry-run(演习模式)- 非常重要的安全选项! 它会模拟整个同步过程,详细列出它将会做的所有操作(复制、删除等),但实际上不会执行任何文件更改。是在执行一个有风险的命令前进行检查的最佳方法。
-
--delete(删除多余文件)- 有风险的强大选项! 这个选项会将在源目录中不存在,但在目标目录中存在的文件删除掉。这可以用来创建一个与源完全一致的镜像备份。使用前请务必配合
--dry-run进行测试。
- 有风险的强大选项! 这个选项会将在源目录中不存在,但在目标目录中存在的文件删除掉。这可以用来创建一个与源完全一致的镜像备份。使用前请务必配合
-
--exclude='PATTERN'(排除文件)- 排除掉符合某种模式的文件或目录。
- 示例:
--exclude='*.log'(排除所有 .log 文件),--exclude='tmp/'(排除 tmp 文件夹)。
-
--include='PATTERN'(包含文件)- 与
--exclude配合使用,用于更精细地控制包含/排除规则。
- 与
-
-z, --compress(压缩传输)- 在传输过程中对数据进行压缩,可以减少网络带宽占用。对于文本类文件效果很好,但对于已经压缩过的文件(如 .zip, .jpg)效果不大,反而会消耗更多 CPU。
-
-P- 这个选项相当于
--partial --progress。--partial允许rsync保留传输中断的文件,以便下次可以断点续传。
- 这个选项相当于
3. 常见用例
本地文件夹同步
将 source_folder 的内容同步到 backup_folder。
|
上传到远程服务器 (Push)
将本地的 my_project 文件夹上传到服务器。
|
从远程服务器下载 (Pull)
将服务器上的 remote_logs 文件夹下载到本地。
|
创建镜像备份 (删除目标端多余文件)
让本地的 backup 文件夹与源文件夹 source_data 完全保持一致。
|
指定 SSH 端口和密钥
如果远程服务器使用非标准 SSH 端口或需要特定密钥。
|
rsync 是一个功能极其丰富的工具,掌握好 -avh --progress、--delete 和 --dry-run 这几个核心选项,就能满足绝大多数的文件同步需求。
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
Comments
GiscusUtterances