linux - 如何复制包含绝对符号链接(symbolic link)的文件夹并保留其相对目标

标签 linux shell command-line terminal symlink

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

/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保留符号链接(symbolic link)目标的相对位置:

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

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

最佳答案

使用 symlinks将绝对符号链接(symbolic link)转换为相对符号链接(symbolic link)的程序:

symlinks -c  wxcrafter

然后复制整个目录:

cp -a wxcrafter codeblocks

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

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

关于linux - 如何复制包含绝对符号链接(symbolic link)的文件夹并保留其相对目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49596700/

相关文章:

linux - 将特定传出 url 重新路由到另一个 url - linux ubuntu 16.04

java - 在 linux 上添加一个库

linux - 如何在AMD(EPYC)处理器上使用rdpmc指令?

linux - 为什么我会优先使用 "service sshd reload"而不是 "service sshd restart"?

shell - fish shell 范围内的支撑扩展

python - 附加现有进程以获取成功或失败命令?

mysql - 在MySQL中,如何在命令行中运行sql?

用于计算文件中相似词的 Linux shell 脚本

java - 在命令行上将多个 jar 添加到类路径

function - shell 脚本函数参数/参数