是否可以创建“跟随”文件的符号链接?

是否可以创建“跟随”文件的符号链接?

行为:

me@local: tree
.
|-- ba
|   `-- file.txt
|-- foo
|   `-- file.txt -> ba/file.txt
`-- foobar

现在,假设我将 file.txt 从 移动bafoobar

me@local: mv ba/file.txt foobar/file.txt

我注意到 foo 文件夹中的符号链接仍然指向该ba/file.txt路径。

有没有一种方法可以创建符号链接,当源文件被移动时自动更新路径?

或者当我删除源文件时符号链接也被删除了?

一定会很棒的。

答案1

您可以创建硬链接。

硬链接也有其缺点,例如,无法链接到目录,无法跨文件系统链接。而且,当您删除“原始”文件时,它们不会被删除;事实上,它们会阻止驱动器空间被释放,并且您仍然可以通过硬链接访问内容。

您无法在文件浏览器(Files,以前称为 Nautilus)中创建硬链接,但有一个旧的错误报告(已关闭,不会修复)关于此内容。

答案2

是的你可以。

在 shell 中,您必须输入:

ln ba/file.txt foo/file.txt

这是一个强链接,即使你删除了 ba/file.txt 中的文件,它仍然保留在 foo/file.txt 中(你可以使用ls -l命令查看有多少个链接

如果您想执行您所做的事情(创建符号链接),您必须输入:

ln -s ba/file.txt foo/file.txt

答案3

据我所知,使用普通的 Linux 文件系统无法做到这一点。

符号链接实际上只是一段愚蠢的文本,上面写着“看,我真的叫 Foo”——正如您所发现的,没有检查 Foo 是否存在。您可以轻松创建指向无内容的符号链接,就像创建指向有用内容的符号链接一样。

也许对 ext2/3/4 以外的文件系统(例如,jfs?或 zfs?或 zfs?)有更多了解的人可能会说这在比 ext2/3/4 更先进的文件系统下是否可行。也许 NTFS 甚至可能支持这一点?NTFS 没有这样的符号链接,但有一个类似的功能,称为连接点

答案4

编写一个脚本或程序来向文件添加一个 xattr,告诉它指向它的符号链接的路径。然后为您使用的实用程序(例如,mv)编写一个包装脚本,以便在移动源文件时更新符号链接的目标。

虽然我只是半开玩笑,而且这是一个可行的解决方案,但是有太多的壁挂情况(而不是角落或边缘情况......)肯定会引起很多麻烦(例如,使用任何其他程序移动文件)。

相关内容