当前位置:首页 > 文章列表 > 文章 > linux > rsync 怎样只同步文件属性不复制内容

rsync 怎样只同步文件属性不复制内容

来源:17golang原创 2026-10-24 22:49:23 0浏览 收藏

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 用来改变内容比较方式,不是属性专用开关;若检测出内容不同,正常同步仍可能传输数据。

若扩展到目录树,需要先处理路径对应、符号链接、文件类型和并发写入边界。源路径末尾斜杠会影响目录层级,目录本身的属性也可能被处理。单文件例子不能不加说明地推广为“任何目录树都安全”。

rsync 内容判断条件与属性更新请求的静态关系图
图1:静态结构说明图。existing 控制目标是否可新建,size-only 控制内容更新判断;两者并不构成不可写内容的保护边界。

为什么 existing 和 ignore-existing 不能混用成属性模式

--existing 的意思是跳过目标端不存在的文件,不是跳过已经存在文件的内容更新。因此仅用 rsync -a --existing,仍会更新需要传输的已有文件。

--ignore-existing 则跳过更新目标端已存在的文件。普通文件的属性修复也可能被跳过,不能将它理解为“跳过内容但保留属性更新”。两者同时出现,手册说明不会更新文件;这并不会产生一个可靠的普通文件属性同步模式。

已有目录又有自身处理规则,因此仅观察到目录权限有变化,不能反推同一命令已经修复了所有普通文件的权限。诊断时要明确对象类型,而不是只看任务是否退出。

普通属性、ACL 和扩展属性分别怎么选

不要默认把 -a 等同于所有元数据。归档模式包含一组常见保留选项,但 ACL、扩展属性与硬链接关系需要分别考虑。只需要权限和修改时间时,显式使用 -pt,比额外请求属主、设备等行为更容易限定范围。

属性rsync 选项需额外考虑
权限位-p目标文件系统与执行身份
修改时间-t精度与业务时间语义
属主、属组-o、-g接收端权限及身份映射
ACL-A两端支持与访问控制效果
扩展属性-X属性命名空间与权限

-A、-X 不是“不传内容”的保证,只是增加需要保留的属性类别。若使用远程同步,还要考虑两端 rsync 与文件系统能力,以及数字身份和名称映射是否符合预期。不要仅为消除报错就给接收端无限权限。

权限、时间、身份与扩展元数据的静态分组图
图2:静态关系说明图。不同属性类别有各自选项和权限要求,不能用“归档模式”代替完整需求定义。

严格禁止内容写入时,换成属性工具

若连大小不同的目标文件也必须原样保留其内容,就不要走 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 条件判断时,用明确的属性选项;只要要求“内容绝不能被同步”,就选择专门的属性工具和受控清单。不要让一个看起来简短的参数组合承担它没有提供的保证。

参考:rsync 官方手册、GNU touch 手册。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
lsns 怎样确认进程加入了哪些 Linux namespacelsns 怎样确认进程加入了哪些 Linux namespace
上一篇
lsns 怎样确认进程加入了哪些 Linux namespace
Linux procfs 怎样读取进程的 fd 与挂载信息
下一篇
Linux procfs 怎样读取进程的 fd 与挂载信息
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    669次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    686次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    733次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    701次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    536次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码