还没写完,但是先发一份。

首先,命令都是这种形式的,参数是可选的,SRC 可以有一个或多个,不需要进行区分,最后一个参数永远是 DEST

rsync [OPTION]... SRC [SRC]... DEST

传输/同步 - 最常用命令

rsync -avz --partial --append-verify --progress [src...] [dest]
  • -a:归档模式(递归,保留权限等)
  • -v:详细模式,输出更多信息
  • -z:压缩传输,节省带宽
  • --partial:保留部分传输的数据
  • --append-verify:验证追加的文件数据
  • --progress:显示传输进度

同主机传输,省略了压缩和分块

rsync -aAXv --progress [src...] [dest]

删除 - 删除目标中不存在的文件

# 去掉 --dry-run 执行删除操作
rsync -av --delete --dry-run [src] [dest]
  • --delete:删除目标中不再存在于源的文件
  • --dry-run:仅显示将要执行的操作,实际删除操作需要去掉此选项

增量+删除

同步改动到目标目录

# 去掉 --dry-run 执行删除操作
rsync -aAXvz --delete --partial --append-verify --progress --dry-run [src] [dest]

双向同步

不适合多人场景,有更好的解决方案。

# 先拉取再同步
rsync -aAXvz --partial --append-verify --progress [dest] [src]
rsync -aAXvz --delete --partial --append-verify --progress [src] [dest]

使用 MD4 校验和

# 默认通过文件大小和修改时间判断,强制使用 checksum 更精准但耗时会大幅增加
rsync -av --checksum --update --partial --append-verify --progress [src] [dest]
  • --checksum:通过计算文件的校验和判断文件是否需要同步,精度较高,但速度较慢
  • --update:只更新源文件比目标文件新的文件

增量备份

rsync -a source/ /backup/$(date +%F)/
  • 使用 date +%F 生成日期作为备份目录名,便于按日期管理备份

更全的参数

rsync -avvvzh --update --partial --append-verify --progress --stats --exclude='node_modules/' [src] [dest]
  • -h:以人类可读的方式显示文件大小
  • --stats:传输结束时额外输出一组信息
  • --exclude='node_modules/':排除所有名为 node_modules 的目录(实际是排除所有路径中包含 node_modules 的项)

### 其他

后台运行并输出错误到文件

[command] > sync.log 2>&1