在 OS X 中创建到目录的硬链接的 Bash 命令是什么?

在 OS X 中创建到目录的硬链接的 Bash 命令是什么?

如何在 OS X 中创建指向目录的硬链接(与符号链接或 Mac OS 别名相对)?有一个命令“ln target destination”,但该命令仅在目标是文件时才有效。

我知道 Mac OS 与其他 Unix 环境不同,它允许硬链接到文件夹(例如,Time Machine 就是使用这个),但我不知道自己该怎么做。我也知道使用目录硬链接不是“最佳实践”,因为它可能会导致某些程序在扫描树时无限递归。

答案1

以下是 Stack Overflow 上该问题的链接:

在 OS X 中创建到目录的硬链接的 Bash 命令是什么?

答案2

这应该是不可能的。

man 2 link

int link(const char *path1, const char *path2);

 ....

为了使系统调用成功,path1 必须存在,并且 path1 和 path2 必须位于同一文件系统中。根据 POSIX.1 规定,path1 不能是目录。

我在 MacOS X 10.5.6 上尝试了另一个答案中的代码 - 当尝试从目录创建到同一目录中同名的链接时,它不起作用。

然而它如果两个结果目录没有相同的父目录,则此方法有效。需要阅读链接的文章才能找到答案。

答案3

我听说它是​​被故意禁用的,因为当你将硬链接更改为.其他内容时它会变得复杂。

答案4

那么你就不能直接在 BASH 中执行此操作。但是...我在这里找到了一篇文章,讨论了如何间接执行此操作:http://www.mactech.com/articles/mactech/Vol.23/23.11/ExploringLeopardwithDTrace/index.html通过编译一个简单的小程序:

#include <unistd.h>
#include <stdio.h>
int
main(int argc, char *argv[])
{
   if (argc != 3)
      return 1;
   int ret = link(argv[1], argv[2]);
   if (ret != 0)
      perror("link");
   return ret;
}

$ gcc -o hlink hlink.c -Wall

相关内容