![在 OS X 中创建到目录的硬链接的 Bash 命令是什么?](https://linux22.com/image/482077/%E5%9C%A8%20OS%20X%20%E4%B8%AD%E5%88%9B%E5%BB%BA%E5%88%B0%E7%9B%AE%E5%BD%95%E7%9A%84%E7%A1%AC%E9%93%BE%E6%8E%A5%E7%9A%84%20Bash%20%E5%91%BD%E4%BB%A4%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
如何在 OS X 中创建指向目录的硬链接(与符号链接或 Mac OS 别名相对)?有一个命令“ln target destination”,但该命令仅在目标是文件时才有效。
我知道 Mac OS 与其他 Unix 环境不同,它允许硬链接到文件夹(例如,Time Machine 就是使用这个),但我不知道自己该怎么做。我也知道使用目录硬链接不是“最佳实践”,因为它可能会导致某些程序在扫描树时无限递归。
答案1
以下是 Stack Overflow 上该问题的链接:
答案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