You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

rsync --ignore-times/-I选项行为不符合预期的问题求助

问题分析:rsync -I/--ignore-times 为何同步全部文件

首先纠正一个认知偏差:--ignore-times(或-I)的作用不是仅同步时间戳和大小相同但内容不同的文件,而是完全跳过「时间戳+文件大小」的快速校验逻辑,强制对所有文件进行内容校验(通过校验和比对),只要源文件与目标文件存在差异(包括内容、时间戳),就会同步。

你的测试脚本与输出解析

在你的测试场景中,使用-I时每次rsync都同步所有文件,核心原因是:

  • 对于notupdated这类内容未修改的文件:源文件的时间戳被固定为constantDate的时间,而目标文件的时间戳是第一次rsync时的系统时间(晚于constantDate)。当使用-I时,rsync跳过时间+大小的快速检查,直接比对内容(内容相同),但默认会同步源文件的时间戳到目标,所以会触发时间戳更新,输出中显示f..T...... notupdated(T代表修改时间被同步)。
  • 对于contentsupdatedbutsamesizeanddate这类内容修改但大小、时间戳不变的文件:-I确实能检测到内容差异并同步,这符合你原本的预期,但因为其他文件的时间戳差异也会被同步,所以看起来像是全部文件都被同步了。

正确用法:仅同步「时间戳+大小相同但内容不同」的文件

如果你只想同步那些时间戳和大小都匹配,但内容不同的文件,不能用-I,而是需要结合--checksum(或-c)选项:

  • --checksum会先通过「时间戳+文件大小」快速筛选出可能有变化的文件;对那些时间戳和大小都相同的文件,再通过校验和比对内容,若内容不同则同步。
  • 而-I是直接跳过快速筛选环节,对所有文件都做内容校验,无论时间和大小是否匹配。

验证调整

把你的脚本中OPT="-r -iI"改成OPT="-r -ic",重新运行测试:

  • Updated2阶段只会同步contentsupdatedbutsamesizeanddate文件,其他文件因为时间戳/大小匹配且内容相同,不会被同步。

内容的提问来源于stack exchange,提问作者framp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 23:44:52