例子:
我使用以下命令创建了一个到 /usr/local/bin 文件夹的符号链接
sudo ln -s ~/Desktop/package/Application/tool1
sudo ln -s ~/Desktop/package/Application/tool2
…
我想将我的应用程序文件夹(及其所有工具)移动到 /package/Application (基本上位于 Users 父目录之外)。是否可以让原始符号链接指向新位置中相应的工具?
答案1
不会。符号链接将继续指向同一位置并变为悬空符号链接。要使它们指向新位置,您可以删除它们并正确重新创建它们,或者进行双重间接寻址:创建从工具的当前位置到新位置的符号链接,以便 /usr/local/bin 中的符号链接继续指向(虽然这次是间接的)到正确的位置。
答案2
如果您使用的文件系统支持重新链接您可以考虑使用参考链接。所以而不是:
ln -s oldloc/foo tools/bar
mv oldloc newloc
# oh dear broken link
使用:
cp --reflink=always oldloc/foo tools/bar
# oldloc/foo and tools/bar point to the same disk extents
mv oldloc newloc
# newloc is just a rename so oldloc/foo and tools/bar still point to the same disk extents
仍有一些警告。如果您安装新版本的“foo”,则工具/栏不会更新。
对于大多数链接使用来说,这是一个主要问题。此外,这种重新链接不适用于目录。
您还可以考虑使用硬链接。硬链接总是指向同一个文件(或者更确切地说是相同的底层磁盘位置)。