假设在目录下/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
最好的方法是取消引用两次,但我想您在问题中提到它的事实意味着它对您的用例没有任何好处(为什么?)。
标准bash
shell 中的第二个最佳选择是使用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