如何复制包含绝对符号链接的文件夹并保留其相对目标

How to copy a folder containing absolute symlinks and preserve their relative targets

假设我有一个文件夹:/usr/lib/x86_64-linux-gnu/wxcrafter 包含一些库文件及其相应的符号链接,例如:

/usr/lib/x86_64-linux-gnu/wxcrafter/lib1.so.0 -> /usr/lib/x86_64-linux-gnu/wxcrafter/lib1.so.0.0.0

/usr/lib/x86_64-linux-gnu/wxcrafter/lib2.so.0 -> /usr/lib/x86_64-linux-gnu/wxcrafter/lib2.so.0.0.0

我想将 wxcrafter 复制到新位置 codeblocks保留符号链接目标的相对位置:

usr/lib/x86_64-linux-gnu/codeblocks/lib1.so.0 -> /usr/lib/x86_64-linux-gnu/codeblocks/lib1.so.0.0.0

/usr/lib/x86_64-linux-gnu/codeblocks/lib2.so.0 -> /usr/lib/x86_64-linux-gnu/codeblocks/lib2.so.0.0.0

考虑到可能有许多这样的符号链接,我该如何在命令行上执行此操作?

使用 symlinks 程序将绝对符号链接转换为相对符号链接:

symlinks -c  wxcrafter

然后复制整个目录:

cp -a wxcrafter codeblocks

如果您必须使用绝对符号链接(但为什么要这样做?),请复制 运行 symlinks 之前的原始目录并恢复它完成后。

副本 (codeblocks) 将有相对链接,如果您绝对需要它们,您将不得不编写一个小脚本(使用 ln -fs $(pwd)/$(readlink $l) $l 将任何符号链接 $l 从相对于绝对),因为 symlinks 仅在一个方向上转换。但是,又何必呢?