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

时间:2018-04-01 09:34:09

标签: linux shell command-line terminal symlink

假设我有一个文件夹:/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

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

1 个答案:

答案 0 :(得分:1)

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

symlinks -c  wxcrafter

然后复制整个目录:

cp -a wxcrafter codeblocks

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

副本(codeblocks)将具有相对链接,如果您需要它们,则必须编写一个小脚本(使用ln -fs $(pwd)/$(readlink $l) $l将任何符号链接$l从相对转换为绝对),因为symlinks仅在一个方向上转换。但是,再次,为什么要这么麻烦?