如何复制符号链接同时保持链接的有效性?

如何复制符号链接同时保持链接的有效性?

假设在目录下/usr/local/boost_1_52_0/stage/lib,我有一个符号链接:libboost_timer.so,它指向libboost_timer.so.1.52.0同一目录中的常规文件。

如何在指向同一文件的同时cp对目录进行符号链接。/usr/local/lib/usr/local/boost_1_52_0/stage/lib/libboost_timer.so.1.52.0

我搜索并尝试了几种选择。第一个使用链接名称将常规文件复制到目标目录。第二个只是复制链接本身,但该链接在新目录中无效。第三个使新链接指向原始链接,因此它将取消引用两次以获取常规文件。而且我想使用链接文件名,所以直接制作常规文件的链接是行不通的。

我怎样才能做到这一点?

答案1

最好的方法是取消引用两次,但我想您在问题中提到它的事实意味着它对您的用例没有任何好处(为什么?)。

标准bashshell 中的第二个最佳选择是使用readlink -f(注意,如果文件名包含尾随换行符,这将中断,这是极不可能的,但有可能)。

#!/bin/bash
src="$1"
dest="$2"


fileLinkedTo=$(readlink -f "$src")
if [[ -d "$dest" ]]; then
    ln -s "$fileLinkedTo" "${dest%/}/${src##*/}"
else
    ln -s "$fileLinkedTo" "$dest"
fi

然后运行它:

./script /usr/local/boost_1_52_0/stage/lib/libboost_timer.so /usr/local/lib

相关内容