rsync是Linux中同步两个目录的核心工具,支持本地/远程同步及实时响应:本地用rsync -av --delete /src/ /dest/(斜杠决定是否同步目录本身),远程通过SSH加密传输如rsync -avz user@host:/path,实时同步需配合inotifywait监听事件后触发rsync。

Linux 中同步两个目录,核心是用 rsync——它能高效、增量、可控地保持两边内容一致。是否本地同步、远程同步,还是实时响应变化,方法略有不同,但底层都围绕 rsync 展开。
基础同步:用 rsync 一次性拉齐
这是最常用、最可靠的起点。命令结构清晰,参数组合灵活:
- -a:归档模式,递归 + 保留权限、时间戳、软链接等,日常同步首选
- --delete:让目标目录“严格跟随”源目录,删掉目标里源中没有的文件(慎用,建议先加 -n 模拟运行)
- -v:显示详细过程,便于确认哪些文件被传输或删除
示例(本地同步):
rsync -av --delete /path/to/src/ /path/to/dest/
注意末尾斜杠:/src/ 表示同步目录内容;/src 则会把 src 目录本身也复制进去。
远程同步:走 SSH 加密通道
同步到另一台服务器时,rsync 默认通过 SSH 传输,安全且无需额外配置:
- 目标路径写成 user@host:/path 格式
- 如需指定 SSH 端口,用 -e "ssh -p 2222"
- 确保目标主机已开通对应用户的 SSH 登录权限(推荐密钥免密)
示例(推送到远程):
rsync -avz --delete /data/www/ user@192.168.1.100:/var/www/
rsync -avz -e "ssh -p 2222" --delete /backup/ user@server:/mnt/backup/
实时同步:监听变化后自动触发 rsync
仅靠 rsync 是手动或定时的;要真正“实时”,需配合 inotifywait 监控文件系统事件:
- 安装 inotify-tools:sudo apt install inotify-tools(Ubuntu/Debian)或 sudo yum install inotify-tools(CentOS/RHEL)
- 关键事件类型:create、modify、delete、move、attrib(属性变更,如 chmod)
- 脚本逻辑通常是:inotifywait 持续监听 → 收到事件 → 执行一次 rsync
最小可用脚本片段:
inotifywait -m -r -e modify,create,delete,move,attrib /src | while read; do rsync -a --delete /src/ /dst/; done
进阶提示:避免踩坑的关键细节
同步看似简单,但几个细节常导致结果不符预期:
- 路径末尾斜杠有语义:rsync /a/ /b → 同步 a 下所有内容到 b;rsync /a /b → 把整个 a 目录复制成 b/a
- --delete 不等于 --delete-after:默认在传输前清理目标多余文件,若中途失败可能误删;加 --delete-after 更稳妥
- 排除不需要同步的文件:用 --exclude='.git' --exclude='*.log',多个 exclude 可重复使用
- 首次同步建议加 -n(dry-run):先看 rsync 计划做什么,确认无误再执行真实操作











