Linux rsync 怎样只同步变化文件并保留权限
来源:17golang原创
时间:2026-10-23 10:30:50 415浏览 收藏
Linux 上想“只同步变化文件并保留权限”,最小写法通常是 rsync -a 源目录/ 目标目录/。rsync 默认用文件大小和最后修改时间做 quick check,判断不需要更新的文件会跳过数据传输;-a 是归档模式,包含递归、权限、时间、属主、组等基础属性的保留。这里的“只同步变化”不是只比较文件内容,而是先用快速属性判断,再对需要更新的文件使用增量传输。
目录同步的关键只有两件事:用-a保留权限等属性,用源目录尾部的/明确同步“目录内容”而不是再套一层同名目录。
官方地址:https://download.samba.org/pub/rsync/rsync.1
先把同步接口的两个目标分开
rsync 的调用方目标可以拆成“数据选择”和“属性处理”。数据选择由 quick check 负责:默认关注文件大小和修改时间,属性看起来没有变化时,文件数据通常不必重新发送。对于确实需要传输的文件,rsync 还会用 delta-transfer 算法减少网络上重复的数据。
权限保留则由参数决定。归档模式 -a 等价于一组常用选项,包含 -r 递归目录、-l 保留符号链接、-p 保留权限、-t 保留修改时间、-g 保留组、-o 保留属主以及设备文件相关选项。它适合目录镜像的默认场景,但不代表普通用户一定有权在目标端写入属主或组。
用 -a 写出最小的变化同步命令
本地目录同步可以这样写。命令里的中文注释说明参数职责,示例本身不会把本机路径当成固定配置。
# 只把 source 目录的内容同步到 backup,保留递归、权限和时间 rsync -a source/ backup/ # -v 只增加可读的传输信息;尾部 / 表示同步 source 的内容 rsync -av source/ backup/
如果把源路径写成 source 而不是 source/,目标端通常会出现 backup/source 这一层;写成 source/ 则把其中的内容放进已有目标目录。这个差异不是性能优化,而是路径语义。

用预览和校验参数控制调用方体验
正式同步前,可以先用 --dry-run 看 rsync 计划处理哪些对象,再用 -i 显示变更摘要。下面的组合不会真正写入目标目录,适合先确认尾斜杠和权限选项是否符合预期。
# 只预览变化项;-i 显示每个对象的变更摘要,不写入目标 rsync -avni source/ backup/ # 需要按文件内容比较时才启用 -c;它会读取两端文件内容,成本高于默认 quick check rsync -avci source/ backup/
--checksum(短写法 -c)适合两端修改时间不可信、但必须按内容判断的情况。它不等于“每次都重新传输全部文件”:它改变的是传输前的判断依据,但会增加读取和计算成本。普通备份任务优先使用默认 quick check,并让源端的修改时间在写入或构建环节保持可靠。

远程同步时处理权限、传输和兼容边界
通过 SSH 传到另一台 Linux 主机时,路径使用单个冒号,rsync 通常通过 SSH 建立远程 shell。两端都要安装 rsync,目标登录用户还要对目标目录有写权限。
# 通过 SSH 把源目录内容同步到远程目录,并保留可保留的属性 rsync -av source/ deploy@example.com:/srv/app/ # 先用预览确认远程路径和权限变化,再进行正式同步 rsync -avni source/ deploy@example.com:/srv/app/
如果目标用户不是 root,-a 中的属主和组不一定能够原样落地;权限和时间也会受目标文件系统、挂载选项以及 umask 影响。可以先把要求收窄为 -rltp,明确保留递归、链接、时间和权限,避免把“保留属主”误当成普通用户一定能完成的动作。
单冒号的远程 shell 传输通常经过 SSH 并加密;双冒号或 rsync:// 是 rsync daemon 语法,是否加密取决于额外的传输配置。不要把 daemon 密码直接放到命令行,脚本场景应使用权限收紧的密码文件或受控的 SSH 凭据。
相关问题
文件内容变了但 rsync 没有同步,为什么?
默认 quick check 主要看大小和修改时间。如果上游程序原地改写文件却恢复了旧时间,或者两端时钟和时间戳不可靠,快速判断可能不适合这个任务;此时可以临时使用 -c,并修正生成文件的时间戳管理。
为什么权限没有完全保留?
-a 包含权限和属主等属性,但目标登录用户需要具备相应能力;跨文件系统、ACL、扩展属性和 Windows 兼容层也可能需要额外选项,不能只看命令是否带了 -a。
日常目录同步可以先记住这条组合:-a 负责归档属性,源目录尾部的 / 负责内容语义,默认 quick check 负责快速筛选变化,-c 只在内容比较确实值得付出读取成本时使用。
-
489 收藏
-
244 收藏
-
186 收藏
-
140 收藏
-
446 收藏
-
125 收藏
-
335 收藏
-
157 收藏
-
240 收藏
-
387 收藏
-
179 收藏
-
284 收藏
-
250 收藏
-
336 收藏
-
384 收藏
-
490 收藏
-
126 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习