rsync 怎样只同步文件属性不复制内容
来源:17golang原创
时间:2026-10-24 22:49:23 128浏览 收藏
rsync 可以在判断文件内容不需要更新时,直接修改目标文件上被要求保留的属性。对于已经存在、对应普通文件大小相同且操作期间保持稳定的文件,可用 --existing --size-only 配合 -p、-t 修复权限和修改时间。但这不是绝对的“只改属性”开关:只要大小不同,--size-only 仍会允许内容传输。
如果要求无论源目标内容是否不同,都绝不能写目标内容,应使用专门的属性操作工具,而不是把 rsync 的快速检查条件当成保护锁。官方地址:https://rsync.samba.org/。下面所有命令均为待读者按实际授权使用的示例,本文没有执行文件变更或运行测试。
先判断是属性修复,还是仍需内容同步
| 需求 | 选择 | 前提或限制 |
|---|---|---|
| 稳定副本已存在且普通文件等长,只修权限与时间 | rsync -pt 与 size-only、existing | 大小不一致时仍可能复制内容 |
| 内容有差异也绝不允许内容写入 | chmod、chown、touch 等属性工具 | 逐项明确要改的属性和权限 |
| 要让内容也一致 | 正常 rsync 同步 | 不能同时宣称不复制内容 |
大小相同不等于内容相同。采用 size-only 的取舍是忽略内容差异,只把大小相同的文件视为无需更新数据;它既不会校验内容一致,也不适合掩盖副本损坏。
还要区分“字节内容不变”和“文件完全不变”。修改权限、属主或时间本来就会改变文件元数据,也可能影响访问控制和后续增量任务。属性修复仍应限定目标,不要对整个系统目录套用。
等长普通文件可以怎样使用 rsync
下面刻意只给一个普通文件的例子,避免递归目录、链接和特殊文件引入额外行为。假设 source/item.dat 与 target/item.dat 都已经存在,是受信任的非符号链接普通文件,且已知等长、当前没有程序修改它们。
# 仅在已确认两端对应普通文件等长且稳定时使用。 # -p 同步权限位,-t 同步修改时间;不请求属主、属组或链接复制。 rsync -pti --existing --size-only -- source/item.dat target/item.dat
--existing 阻止创建缺失的目标文件;--size-only 改变内容更新的快速判断条件;-i 给出条目变更说明。这里的命令不是硬性禁止数据传输。若前提不成立,尤其是文件大小不同,就不要执行它来满足“只改属性”的严格要求。
也不要额外加 -I 或 --ignore-times,这会改变跳过内容更新的逻辑。--checksum 用来改变内容比较方式,不是属性专用开关;若检测出内容不同,正常同步仍可能传输数据。
若扩展到目录树,需要先处理路径对应、符号链接、文件类型和并发写入边界。源路径末尾斜杠会影响目录层级,目录本身的属性也可能被处理。单文件例子不能不加说明地推广为“任何目录树都安全”。

为什么 existing 和 ignore-existing 不能混用成属性模式
--existing 的意思是跳过目标端不存在的文件,不是跳过已经存在文件的内容更新。因此仅用 rsync -a --existing,仍会更新需要传输的已有文件。
--ignore-existing 则跳过更新目标端已存在的文件。普通文件的属性修复也可能被跳过,不能将它理解为“跳过内容但保留属性更新”。两者同时出现,手册说明不会更新文件;这并不会产生一个可靠的普通文件属性同步模式。
已有目录又有自身处理规则,因此仅观察到目录权限有变化,不能反推同一命令已经修复了所有普通文件的权限。诊断时要明确对象类型,而不是只看任务是否退出。
普通属性、ACL 和扩展属性分别怎么选
不要默认把 -a 等同于所有元数据。归档模式包含一组常见保留选项,但 ACL、扩展属性与硬链接关系需要分别考虑。只需要权限和修改时间时,显式使用 -pt,比额外请求属主、设备等行为更容易限定范围。
| 属性 | rsync 选项 | 需额外考虑 |
|---|---|---|
| 权限位 | -p | 目标文件系统与执行身份 |
| 修改时间 | -t | 精度与业务时间语义 |
| 属主、属组 | -o、-g | 接收端权限及身份映射 |
| ACL | -A | 两端支持与访问控制效果 |
| 扩展属性 | -X | 属性命名空间与权限 |
-A、-X 不是“不传内容”的保证,只是增加需要保留的属性类别。若使用远程同步,还要考虑两端 rsync 与文件系统能力,以及数字身份和名称映射是否符合预期。不要仅为消除报错就给接收端无限权限。

严格禁止内容写入时,换成属性工具
若连大小不同的目标文件也必须原样保留其内容,就不要走 rsync 的内容更新判断。权限位可考虑 chmod 的参考模式,身份可由 chown 在授权范围内设置,时间则可单独交给 GNU touch。它们只解决各自属性,不会自动成为完整元数据镜像。
# GNU touch:仅复制参考文件的修改时间;-c 避免目标缺失时创建空文件。 # 路径应事先确认为受信任的普通文件,不用于未受控的符号链接。 touch -c -m -r source/item.dat -- target/item.dat
这个例子只改修改时间,不复制权限、属主、ACL 或扩展属性。目标缺失时 -c 不创建文件,但“不创建”也不等于证明目标已经完成属性修复。调用方仍需明确目标存在性与业务结果。
无论采用哪个工具,都不要从不受信任的来源照搬 setuid、setgid、可执行权限或安全相关扩展属性。批量处理应有受控的路径清单和权限边界,不能简单把源目录当作所有属性的权威来源。
按需求选择,而不是记住一个万能组合
为什么内容一样却仍可能传输? rsync 默认快速检查会考虑大小和修改时间,时间不同可触发更新。size-only 是放宽判断,不是验证相同内容,也不是无条件禁止传输。
能在修复时间的同时证明副本内容一致吗? 属性修复与内容一致性判断是两件事。不能从 -t 成功或内容传输量少推导出内容相同;特别是同大小不同内容会被 size-only 放过。
硬链接文件只改一个路径有影响吗? 多个硬链接名称可能指向同一个文件对象,修改权限或时间会反映到该对象上,不能假定其他名称完全不受影响。是否保持硬链接结构又是另一项需求。
可以把最终选择缩成一句话:已知等长且稳定、接受 rsync 条件判断时,用明确的属性选项;只要要求“内容绝不能被同步”,就选择专门的属性工具和受控清单。不要让一个看起来简短的参数组合承担它没有提供的保证。
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
162 收藏
-
273 收藏
-
175 收藏
-
372 收藏
-
418 收藏
-
486 收藏
-
167 收藏
-
448 收藏
-
128 收藏
-
333 收藏
-
117 收藏
-
125 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习