使用 rsync -l 选项可同步软链接所指向的文件内容,生成普通文件而非软链接;-a 默认保留软链接,需显式加 -l 才能跟随,路径尾部斜杠影响作用范围,混合策略需分步或过滤处理。

要让 rsync 同步软链接**所指向的文件内容**(即“跟随链接”),而不是复制软链接文件本身,关键在于使用 -L 选项。
用 -L 展开并同步链接目标
-L(或 --copy-links)会让 rsync 解析每个软链接,读取它实际指向的路径,并把那个目标文件或目录的内容复制过去。目标位置生成的是普通文件/目录,不再是软链接。
- 若源中
/src/link_a → /src/data.txt,执行rsync -avL /src/ /dst/后,/dst/link_a就是一个与data.txt内容完全一致的普通文件 - 多个软链接指向同一文件时,-L 会为每个链接单独复制一份内容(不共享 inode,不硬链接)
- 如果某个软链接指向不存在的路径(悬空链接),-L 会报错并跳过该链接,不会中断整个同步
-a 默认不跟随,必须显式加 -L
-a(归档模式)隐含 -l(保留软链接),也就是说:rsync -a 实际上是“原样复制软链接文件”,不是**跟随**内容。想跟随,必须额外加上 -L —— 它会覆盖 -l 的行为。
- ✅ 正确:
rsync -avL /src/ /dst/(跟随内容) - ❌ 错误:
rsync -av /src/ /dst/(只复制链接本身)
注意路径尾部斜杠的影响
软链接同步效果还受源路径是否带斜杠影响,尤其在目录级操作中:
-
rsync -avL /src/ /dst/:同步/src/目录下的所有内容(含其中的软链接),-L 对其内部所有软链接生效 -
rsync -avL /src /dst/:把整个/src目录(包括目录名)同步过去,/dst/src/下的软链接才被 -L 处理
需要部分跟随、部分保留?得拆开处理
rsync 不支持单次命令里对某些软链接用 -L、某些用 -l。如需混合策略:
- 先用
rsync -avL同步全部,再用ln -sf手动重建你希望保留的软链接 - 或用
--filter配合排除规则,例如:rsync -avL --filter="protect */link_to_keep" /src/ /dst/,再单独处理被保护的链接











