要让 rsync 完全忽略软链接,需禁用所有链接相关选项:不用 -a(因其隐含 -l),不加 -l 和 -L,并推荐使用 --no-links(rsync 3.1.0+);或用 find 预筛选非软链接路径配合 --files-from 同步。

要让 rsync 在同步过程中完全忽略软链接(即既不复制软链接本身,也不展开复制其指向的目标),关键不是靠 -l 或 -L,而是通过排除规则配合行为控制来实现。rsync 本身没有“跳过软链接”的直接开关,但可通过组合参数达成效果。
用 --exclude 配合 -a 并禁用链接处理
rsync 默认在归档模式(-a)下会保留软链接(等价于启用 -l)。若想彻底跳过所有软链接,需显式禁用链接处理,并用通配符排除:
- 去掉
-l(避免复制软链接本身) - 不加
-L(避免展开复制目标) - 添加
--exclude='*/' --exclude='*'不起作用——软链接是文件类型,不是路径名模式 - 正确做法:使用
--filter='exclude_l'(但 rsync 不支持该语法)→ 实际有效方式是不启用任何链接相关选项,并配合文件类型过滤
更可靠的方法是:用 find 预筛选出非软链接的路径,再交给 rsync:
find /path/to/src -xtype l -prune -o -print0 | rsync -av --files-from=- --null / /path/to/dest
其中 -xtype l 找出所有软链接并剪枝(-prune),-o -print0 输出其余所有非软链接条目,--files-from 让 rsync 只同步这些路径。
用 --safe-links 跳过“不安全”软链接(部分规避)
--safe-links 的作用是:只保留指向同步树内部的软链接,而忽略所有指向树外(如 /home、/tmp 或上级目录)的软链接。它不会跳过全部软链接,但能防止危险跳转:
- 适用于源目录结构清晰、软链接本就不该跨出项目范围的场景
- 命令示例:
rsync -av --safe-links /src/ /dst/ - 注意:仍会复制“安全”的软链接本身,不是真正“忽略”
最简实用方案:用 -r 代替 -a 并显式关闭链接行为
-a 包含 -l(保留软链接),所以只要不用 -a,改用基础递归 + 显式属性控制,就能天然避开软链接处理:
rsync -rvptgoD --no-links /src/ /dst/-
--no-links是 rsync 3.1.0+ 支持的明确禁用链接处理的选项(等价于不加-l且不加-L) - 此时软链接会被当作普通文件跳过(rsync 默认不传输特殊文件类型,除非明确启用对应选项)
- 验证方式:同步后检查
/dst/中不存在任何lrwxrwxrwx权限的条目
补充提醒:软链接是否被传输,取决于你是否触发了链接相关逻辑
rsync 是否处理软链接,本质由以下三点决定:
- 有没有用
-l(复制软链接文件本身) - 有没有用
-L(展开并复制目标内容) - 有没有用
--copy-unsafe-links或--safe-links等修饰行为
只要这三个都未出现,且未使用 -a(它隐含 -l),rsync 就不会对软链接做任何操作——它们会被安静跳过,既不报错也不传输。


















