我有一个文件夹,里面有很多链接。
我将这些链接设置为绝对链接,以便我可以在文件夹内移动它们,并且它们仍然指向相同的数据。如果我将它们移动到文件夹中,相对链接就会中断。
但是当我将文件夹移动到另一个系统(例如外部硬盘驱动器或服务器)时,问题就出现了。那么所有绝对链接的地址基址都是错误的。
如果可以让链接在其地址指向中包含一个变量,那么就可以解决这个问题。
那可能吗?
答案1
我猜你的问题的答案是不同的符号链接,尽管据我所知它们只存在于 DragonFlyBSD 上(请参阅上一个问题:动态符号链接)
答案2
命令
symlinks -cr folder
将把所有绝对符号链接转换folder
为相对符号链接。因此,您可以移动整个文件夹,其中的链接指向其正确的相对位置(假设它们都指向 中的其他文件folder
)
然后像...
find folder -type l -exec echo 'LNK=$(readlink -f "{}");rm -fv "{}";ln -sv "$LNK" "{}"' ';' > xlinks
chmod +x xlinks
./xlinks
...将把所有链接从相对链接转换为绝对链接。
(注意:我放弃了直接从 执行命令的尝试find
。无论如何,它给了你一个机会来检查它会做什么!)
答案3
你不能鱼与熊掌兼得。相对链接通常更好,因为您可以移动它们并将树的全部或部分复制到另一个位置。
如果您在层次结构中移动文件,则不清楚是什么应该发生:如果有链接a -> b
和c -> d
,并且您运行mv b d
,现在应该a
指向d
?由您决定。符号链接指向一个位置;如果你想指向一个文件,请使用硬链接(这对于目录来说是不可能的)。
如果您移动文件但仍想在其旧位置下找到它,请添加从旧位置到新位置的符号链接。