系统学习 macOS 学习路径:从 BSD 文件命令到系统、网络与开发维护

rsync

在 macOS 本地或远端之间做增量同步,保留权限和扩展属性。

补充说明

rsync 只传输差异部分,适合备份、部署和大目录同步。macOS 的系统版本差异很大:macOS 14 及更早自带 Apple 修补的 rsync 2.6.9,支持用 -E 保留扩展属性、ACL 和资源分支;macOS 15 起系统自带的是 openrsync,rsync --version 会显示 “rsync version 2.6.9 compatible”,常用选项可用,但缺少 --info=progress2、--acls、--xattrs 等完整 rsync 特性。需要这些能力时用 brew install rsync,并确认脚本调用的是 Homebrew 的路径。

源路径末尾的斜杠决定语义:src/ 同步的是目录内容,src 会在目标下创建 src 目录。执行前先 -n(dry-run)确认文件列表,配合 -av 看将被删除或修改的条目。--delete 只影响目标端,但方向写反或源路径写错会清空目标,生产环境必须加 --dry-run 和 --max-delete 保护。

macOS 的 -a 只包含常规权限、时间、符号链接等,不包含扩展属性和 ACL;本机备份用 -aE,跨平台到 Linux 时 -E 可能不被识别,应改用 Linux 侧的 -AX 或接受属性丢失。APFS 默认大小写不敏感,和区分大小写的 Linux 目录同步时可能出现同名冲突。

常用示例

# 先确认系统 rsync 的类型和版本
% rsync --version

# 演练:只列出将发生的变化,不写目标
% rsync -avn ./src/ /Volumes/Backup/src/

# 本机备份,保留扩展属性和 ACL
% rsync -aE ./src/ /Volumes/Backup/src/

# 同步到远端并删除目标端多余文件;先 dry-run
% rsync -avn --delete --exclude '.DS_Store' ./src/ user@host:/srv/src/
% rsync -av --delete --exclude '.DS_Store' ./src/ user@host:/srv/src/

# 指定 SSH 端口
% rsync -av -e 'ssh -p 2222' ./src/ user@host:/srv/src/

# 大文件支持断点续传和进度
% rsync -av --partial --progress ./big.iso user@host:/data/

# 覆盖前保留旧版本到备份目录
% rsync -av --backup --backup-dir=../bak ./config/ /srv/config/

易错点与排错

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. rsync -a src/ dest/ 和 rsync -a src dest/ 有什么区别?
  2. 为什么 macOS 上用 --info=progress2 可能报未知选项?
  3. 使用 --delete 前应该做哪些保护?
答案
  1. src/ 同步目录内容到 dest/ 下;src 会在 dest/ 下创建 src 子目录,结果多一层。
  2. macOS 15 起系统自带 openrsync,只兼容 rsync 2.6.9 的常用选项,不支持 --info=progress2;需要完整特性应安装 Homebrew rsync。
  3. 先 -n dry-run 核对文件列表,确认源路径和方向,再加 --max-delete 限制删除量,重要数据先做备份。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令