Rm 硬链接而不删除文件/目录本身

Ale*_*lls 1 osx hard-link rm ln

假设我创建了一个硬链接ln x y

创建链接后,有没有办法在不删除 x 处的文件的情况下删除 y 处的链接?看起来我rm -rf在 y 上做了一个,它也删除了 x,如果可能的话,我想避免这种情况,哈哈。

Kus*_*nda 7

$ echo 'hello' >name
Run Code Online (Sandbox Code Playgroud)
$ ln name othername
Run Code Online (Sandbox Code Playgroud)
$ ls -l
total 4
-rw-r--r--  2 kk  wheel  6 Jun 25 09:45 name
-rw-r--r--  2 kk  wheel  6 Jun 25 09:45 othername
Run Code Online (Sandbox Code Playgroud)
$ cat othername
hello
Run Code Online (Sandbox Code Playgroud)
$ rm name
Run Code Online (Sandbox Code Playgroud)
$ ls -l
total 2
-rw-r--r--  1 kk  wheel  6 Jun 25 09:45 othername
Run Code Online (Sandbox Code Playgroud)
$ cat othername
hello
Run Code Online (Sandbox Code Playgroud)

如果在删除一个硬链接的同时也删除了另一个,那么您就做错了。在这种情况下使用rmrm -rf无关紧要,删除哪个名称也无关紧要。

删除硬链接只会删除文件的名称之一。我可以看到rm -rf可以删除两个名称的唯一方法是,如果您将它与匹配两个名称的文件名全局一起使用,或者您删除了包含它们的目录。


从评论看来,您实际上正在使用一个为目录创建硬链接的应用程序。在某些条件下,这在 macOS HFS+ 文件系统上是可能的。使用硬链接目录通常非常繁琐,并且它们的使用主要限于诸如 Apple 自己的 TimeMachine 软件之类的东西。

相关的 Stackoverflow 问题:在 OS X 中创建指向目录的硬链接的 Unix 命令是什么?

在该问题的答案中指出,需要使用unlink而不是rm -r因为rm -r删除目录的内容(以其所有名称)来删除硬链接目录。

另请参阅:强制创建目录硬链接?

  • @AlexanderMills 通常,您无法在 Linux 上创建指向目录的硬链接。 (4认同)