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

rsync同步文件至安卓设备时无法检测已存在文件问题

问题核心诱因

该问题的根源是通过GVFS挂载MTP协议访问手机存储的方式,无法提供rsync做增量判断所需的可靠文件元数据,具体原因如下:

  • rsync默认判断是否需要重传文件的逻辑非常简单:比对源和目标对应文件的「文件大小+最后修改时间(mtime)」,两个值完全匹配时就认定文件没改动,直接跳过传输。但MTP协议本身就不支持写文件时保留源端的原始mtime:文件拷到Pixel 6内置存储后,安卓的MTP服务会把文件mtime改成文件实际写入手机的时间,甚至不少场景下每次重新连手机挂载MTP,GVFS读到的文件时间戳还会有随机偏差。你现在的命令只加了--omit-dir-times跳过目录的时间校验,没跳过文件本身的mtime比对,rsync扫到两边文件mtime对不上,自然会觉得文件有变化,把所有文件重传一遍。
  • GVFS做的MTP挂载本质是虚拟文件系统,没完整实现POSIX标准文件系统的属性查询能力,有些时候返回的文件大小、基础属性本身就不准,会进一步干扰rsync的判断。
  • 你命令里加的--inplace参数还会放大这个问题:这个参数要求rsync直接在目标位置原地改文件内容,但MTP协议对原地写入的支持非常差,写完之后返回的文件元数据和实际写入的内容经常对不上,更容易让rsync误以为文件没同步成功。

你要是想验证的话,随便找个已经同步完的文件,分别对源路径和GVFS挂载下的目标路径执行stat命令看属性,就能发现两边的mtime明显不一样,这就是rsync认不出已存在文件的直接证据。如果要临时绕开这个问题,可以给rsync加个--size-only参数,只靠文件大小判断要不要传,不过受MTP本身的缺陷限制,这种方式还是有小概率误判,更稳定的方案是走adb调试通道同步,或者用SSH/SFTP这类支持完整POSIX属性的传输协议。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:18:09