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:已在上文列出,用于限制带宽。