如何在Mac OS X中创建指向目录的硬链接?
此功能已添加到Mac OS X v10.5(Leopard)的文件系统中(用于时间机器),但我找不到有关从命令行实际使用它的任何信息.
如果有兴趣的话,我已经在Git存储库中捆绑了建议的答案:https://github.com/selkhateeb/hardlink
安装后,创建一个硬链接:
hln source destination
我也注意到该unlink
命令在Mac OS X v10.6(Snow Leopard)上不起作用,所以我添加了一个取消链接的选项:
hln -u destination
要安装Hardlink,请使用Homebrew并运行:
brew install hardlink-osx
不幸的是,苹果已经削弱了ln
命令.您可以使用以下程序创建指向目录的硬链接:
#include#include int main(int argc, char* argv[]) { if (argc != 3) { fprintf(stderr,"Use: hlink \n"); return 1; } int ret = link(argv[1],argv[2]); if (ret != 0) perror("link"); return ret; }
考虑到硬链接目录可能不在同一个父目录中,因此您可以这样做:
$ gcc hlink.c -o hlink $ mkdir child1 $ mkdir parent $ ./hlink child1 parent/clone2
在the_undefined对问题的回答中,关于如何删除目录的硬链接而不删除链接到的其他目录的内容:据我所知,无法使用内置命令从命令行完成.然而,这个小程序(受Freeman的帖子启发)将会这样做:
#include#include int main(int argc, char* argv[]) { if (argc != 2) { fprintf(stderr,"Use: hunlink \n"); return 1; } int ret = unlink(argv[1]); if (ret != 0) perror("unlink"); return ret; }
继续Freeman的例子,
$ gcc hunlink.c -o hunlink $ echo "foo bar" > child1/baz.txt $ ./hunlink parent/clone2
将删除parent/clone2上的硬链接,但保留目录child1
和文件child1/baz.txt
.
另一种解决方案是使用可通过端口安装的bindfs https://code.google.com/p/bindfs/:
sudo port install bindfs sudo bindfs ~/source_dir ~/target_dir