如何复制包含绝对符号链接的文件夹并保留其相对目标
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
仅在一个方向上转换。但是,又何必呢?
假设我有一个文件夹:/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
仅在一个方向上转换。但是,又何必呢?