rsync默认通过文件大小和修改时间(mtime)判断是否同步,任一不同即传输,两者一致则跳过;核心是增量同步,无需额外开关。必备参数为-a(含-t保留mtime),配合--delete可保持源目标严格一致。

rsync 默认就是只同步修改过的新文件或有变化的内容,不需要额外开启特殊开关——它的核心机制就是增量同步。
关键原理:rsync 怎么判断“新”或“改过”
默认情况下,rsync 通过两个维度比对源和目标文件:
- 文件大小不同 → 视为需传输
- 修改时间(mtime)不同 → 视为需传输(前提是目标文件已存在且时间戳可读)
只要其中任一条件成立,rsync 就会同步该文件;两者都一致,则跳过。这个逻辑天然支持“仅同步修改过的新文件”。
确保行为可靠的必备选项
为避免因时间戳被意外重置、挂载文件系统不支持 mtime 等情况导致误判,建议固定使用以下组合:
- -a:归档模式(含 -r -l -p -t -g -o -D),其中 -t 保留修改时间,是判断依据之一
- --size-only(可选):如果明确只按大小判断(比如 NFS 挂载下 mtime 不稳定),可加此参数,忽略时间戳
- --ignore-times(慎用):强制跳过时间/大小检查,每次都传——这不是你想要的,仅作对比说明
典型安全同步命令示例
从本地 /data 同步到远程服务器,只传真正变更过的文件:
rsync -av --delete /data/ user@192.168.1.100:/backup/data/
- -a 确保属性完整、mtime 可靠
- -v 方便确认哪些文件被跳过/传输
- --delete 可选:删除目标端多余文件,保持两端严格一致
注意几个易错点
- 目标目录末尾加 /(如
/backup/data/)表示同步内容;不加(如/backup/data)会把整个data目录复制进去 - 若目标是 rsync 守护进程(使用
::module语法),需确保服务端配置中read only = no且权限正确 - 跨时区同步时,-t 仍有效,rsync 内部以 Unix 时间戳比对,不受本地时区影响











