行为:
me@local: tree
.
|-- ba
| `-- file.txt
|-- foo
| `-- file.txt -> ba/file.txt
`-- foobar
现在,假设我将 file.txt 从 移动ba
到foobar
:
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)编写一个包装脚本,以便在移动源文件时更新符号链接的目标。
虽然我只是半开玩笑,而且这是一个可行的解决方案,但是有太多的壁挂情况(而不是角落或边缘情况......)肯定会引起很多麻烦(例如,使用任何其他程序移动文件)。