rsync 用符号链接替换现有目录

rsync 用符号链接替换现有目录

在 server1 上:/dir1 是 dir2 的符号链接

在server2上:/dir1是一个具有其自己内容的目录

我想使用 rsync 使 server2:/dir1 成为 dir2 的符号链接,就像在 server1 上一样。

如果我在 server1 上执行此操作:

rsync -azvs --delete /dir1 user@server2:/dir1

然后我实际上在 server2 上获得了一个新的(损坏的)符号链接:

/dir1/dir1 -> dir2

(因此它将符号链接复制到现有的 /dir1 目录中,而不是替换它)

我可以让 rsync 使用符号链接来破坏现有的 /dir1 目录吗?

编辑:我认为上述命令可以工作,因为在 rsync 的 man 部分中有这样的注释--copy-dirlinks

如果没有此选项,如果发送方已用指向目录的符号链接替换了目录,则接收方将删除新符号链接中的任何内容,包括目录层次结构(只要 --force 或 --delete 有效)。

--force但是,有和没有,以及有和没有 ,行为看起来都相同-k

答案1

问题在于您指定了/dir1目的地。您需要上一级。

rsync -azvs --delete /dir1 user@server2:/

答案2

我不明白为什么你会使用 Rsync 在同一个服务器中创建符号链接。也许我误解了你的问题,但是如果你想创建符号链接服务器2内来源/dir2并链接/dir1,您只需运行:ln -s /dir2 /dir1

以防万一,正如其他答案所述,并将问题扩展到您的线路。

解构你的命令:

rsync -azvs --delete /dir1 user@server2:/dir1

您正在执行 rsync、存档模式(递归、所有者、组、包含符号链接作为符号链接等)、压缩、详细且无空间分割:

    -a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
    -z, --compress              compress file data during the transfer
    -v, --verbose               increase verbosity
    -s, --protect-args          no space-splitting; wildcard chars only

此外,您正在删除目的地差异:

        --delete                delete extraneous files from dest dirs

然后你使用 as origin /dir1,这意味着整个目录,而不仅仅是内容(因为没有尾随斜杠“/”)。

而目的地是user@server2:/dir1,考虑到/dir1是一个符号链接,并且你正在使用-a存档标志,你正在复制根目录中的符号链接/dir1,结尾是这样的:

server2:/dir1/dir1

相关内容