rsync --copy-unsafe-links 问题与相对符号链接不复制

问题描述

当我将 rsync 与选项 --copy-unsafe-links 一起使用时,当符号链接是相对的时它不起作用。如果 simlink 是绝对链接,它会按预期工作:复制目标的内容而不是创建损坏的符号链接

我在 /tmp 中有一个目录结构:

rsync-problem
├── dst
└── src
    ├── a
    │   ├── a-file
    │   ├── b-symlink -> ../b
    │   └── c-symlink -> /tmp/rsync-problem/src/c
    ├── b
    │   └── b-file
    └── c
        └── c-file

运行 rsync 后:

rsync \
--copy-unsafe-links \
--links \
--recursive \
/tmp/rsync-problem/src/a \
/tmp/rsync-problem/dst

我得到一个损坏的相对符号链接b-symlink -> ../b 目录中的 rsync-problem/dst/a一个正确转换的绝对符号链接文件 rsync-problem/dst/a/c-symlink/c-file

rsync-problem
├── dst
│   └── a
│       ├── a-file
│       ├── b-symlink -> ../b
│       └── c-symlink
│           └── c-file
└── src
    ├── a
    │   ├── a-file
    │   ├── b-symlink -> ../b
    │   └── c-symlink -> /tmp/rsync-problem/src/c
    ├── b
    │   └── b-file
    └── c
        └── c-file

rsync for --copy-unsafe-links 的人:

这告诉 rsync 复制指向复制树之外的符号链接的指示对象。绝对符号链接也是 像普通文件一样对待,源中的任何符号链接也是如此 使用 --relative 时的路径本身。这个选项没有额外的 如果还指定了 --copy-links 则效果

未声明此选项在遇到相对符号链接时无效。

如果我理解正确

这告诉 rsync 复制指向的符号链接的所指对象 在复制的树之外

/tmp/rsync-problem/src/b

在复制的 src 树之外:

/tmp/rsync-problem/src/a

我做错了什么以及如何让 rsync 将相对符号链接转换为文件,就像处理绝对符号链接一样?

复制问题的脚本:

#!/bin/sh

set -ue

mkdir -p /tmp/rsync-problem/dst

mkdir -p /tmp/rsync-problem/src/a
touch /tmp/rsync-problem/src/a/a-file

mkdir -p /tmp/rsync-problem/src/b
touch /tmp/rsync-problem/src/b/b-file

mkdir -p /tmp/rsync-problem/src/c
touch /tmp/rsync-problem/src/c/c-file

cd /tmp/rsync-problem/src/a
ln -sr ../b b-symlink
ln -s /tmp/rsync-problem/src/c /tmp/rsync-problem/src/a/c-symlink

rsync \
--copy-unsafe-links \
--links \
--recursive \
/tmp/rsync-problem/src/a \
/tmp/rsync-problem/dst

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)