Skip to content

rsync 教程

简介

rsync 是一个用于 Unix/Linux 系统的文件传输工具,支持本地和远程文件同步。它的主要特点包括增量备份、压缩传输和支持多种协议(如 SSH 和 RSH)。 rsync 与其他文件传输工具(如 scp 和 ftp)相比,rsync 的最大特点是会检查发送方和接收方已有的文件,仅传输有变动的部分(增量传输)。r 指的是 remote,rsync 其实就是"远程同步"(remote sync)的意思,它也可以当作文件复制工具,替代 cp 和 mv 命令。

安装

注意,传输的双方都必须安装 rsync。

远程服务器上安装 rsync:

bash
# Debian/Ubuntu
$ sudo apt-get install rsync

# Red Hat/CentOS/Fedora
$ sudo yum install rsync

# Arch Linux
$ sudo pacman -S rsync

本地安装 rsync:

bash
# Mac mac系统自带2.6.9版本,建议升级到最新版本
$ brew install rsync
# 配置环境变量
$ echo 'export PATH="/usr/local/opt/rsync/bin:$PATH"' >> ~/.zshrc
$ source ~/.zshrc

常见用法

-avz 参数

  • -a:(archive)归档模式,表示以递归方式传输文件,并保持文件的权限、时间戳等属性。
  • -v:(verbose)详细模式,显示传输过程中的详细信息。
  • -z:(compress)压缩传输,减少传输的数据量。
bash
# dist 是将文件 dist 一起复制,dist/ 是将dist目录下的文件复制
rsync -avz docs/.vitepress/dist/ pangzl:/www/wwwroot/pangzl.com/

--delete 参数

默认情况下,rsync 只确保源目录的所有内容(明确排除的文件除外)都复制到目标目录。它不会使两个目录保持相同,并且不会删除文件。如果要使得目标目录和源目录保持完全一致,则必须使用 --delete 参数,这将删除只存在于目标目录、不存在于源目录的文件。

bash
rsync -avz --delete docs/.vitepress/dist/ pangzl:/www/wwwroot/pangzl.com/

其他参数

常用参数

  • -a, --archive:归档模式(等同于 -rlptgoD),递归传输并保留权限、时间戳、软链接等元数据,适用于备份与部署。
  • -P:等同 --partial --progress,显示传输进度并保留部分已传输文件,便于中断恢复。
  • -z:传输时压缩数据,节省带宽(会增加 CPU 开销)。
  • -v:详细输出;可用 -vv / -vvv 增强详细程度。
  • -n, --dry-run:模拟运行,不做任何实际更改,用于预览将要执行的操作。
  • --delete:使目标与源保持一致,删除目标中在源不存在的文件。
  • -e 'ssh ...':指定远程 shell/命令,例如 -e "ssh -p 2222"(用于指定端口或自定义 SSH 选项)。
  • --exclude=PATTERN / --exclude-from=FILE:排除匹配项或从文件读取排除规则(例如忽略 .git/node_modules/)。
  • --bwlimit=KBPS:限制带宽(单位 KB/s),例如 --bwlimit=100

备份与增量相关

  • --link-dest=DIR:基于已有目录创建增量备份(通过硬链接复用未改变的文件)。
  • -b, --backup:在覆盖或删除目标文件时保留备份,备份后缀由 --suffix 决定。
  • --backup-dir=DIR:将备份文件保存到指定目录。
  • --suffix=SUFFIX:指定备份后缀,默认 ~

中断恢复(断点续传)

  • --partial:保留未完成的文件,以便下次继续传输(常与 --append 配合)。
  • --partial-dir=DIR:将部分文件保存到指定临时目录(如 .rsync-partial)。
  • --append:从上次中断位置继续传输(不校验已有内容)。
  • --append-verify:从上次位置继续传输,传输完成后校验;校验失败时会重传整个文件。

筛选与校验

  • -c, --checksum:使用校验和判断是否传输(比时间戳+大小更严格,但更慢)。
  • --size-only:只比较大小,不考虑修改时间。
  • --ignore-existing:跳过目标中已存在的文件。
  • --existing / --ignore-non-existing:仅同步目标已存在的文件,忽略目标不存在的。
  • --include=PATTERN:与 --exclude 配合,显式包含某些匹配项。

递归与行为控制

  • -r:递归复制目录(-a 已包含)。
  • -u, --update:跳过目标中更新的文件(基于时间戳)。
  • -m:不创建空目录(类似于 --prune-empty-dirs)。
  • --remove-source-files:传输成功后删除源端文件(用于移动场景,谨慎使用)。

输出与调试

  • -h:以人类可读格式显示大小(常与 -v 搭配)。
  • -i:显示文件差异的详细信息(itemize-changes)。
  • --progress:显示传输进度(-P 已包含)。
  • --version / --help:显示版本或帮助信息。

其他进阶参数

  • --max-size=SIZE:仅传输小于该大小的文件,例如 --max-size='200k'
  • --min-size=SIZE:仅传输大于该大小的文件,例如 --min-size=10k'
  • --bwlimit:已在上文列出,用于限制带宽。

构建时间:11/21/2025, 1:28:39 PM | 本博客内容均为自己学习,如内容涉及侵权,请联系邮箱:pangzl0215@163.com