在MacOS X中创build目录硬链接?
我如何创build一个硬链接到OSX中的目录?
这个特性已经被添加到他们的文件系统中(用于时间机器),但是我没有find任何有关从命令行实际使用它的信息。
不幸的是,苹果已经瘫痪了指挥官。 您可以使用以下程序创build一个到目录的硬链接:
#include <unistd.h> #include <stdio.h> int main(int argc, char* argv[]) { if (argc != 3) { fprintf(stderr,"Use: hlink <src_dir> <target_dir>\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
如果有人感兴趣,我已经在git代码中提供了build议的答案: https : //github.com/selkhateeb/hardlink
一旦安装,创build一个硬链接:
hln source destination
我也注意到unlink
命令在雪豹上不起作用,所以我添加了一个选项来取消链接:
hln -u destination
要安装Hardlink,请使用自制软件并运行:
brew install hardlink-osx
在回答the_undefined关于如何删除一个硬链接到一个目录的问题,而不删除其链接到的其他目录的内容:据我所知,不能从命令行使用内置命令完成。 然而,这个小程序(由弗里曼的文章启发)将做到这一点:
#include <unistd.h> #include <stdio.h> int main(int argc, char* argv[]) { if (argc != 2) { fprintf(stderr,"Use: hunlink <dir>\n"); return 1; } int ret = unlink(argv[1]); if (ret != 0) perror("unlink"); return ret; }
继续弗里曼的例子,
$ gcc hunlink.c -o hunlink $ echo "foo bar" > child1/baz.txt $ ./hunlink parent/clone2
将删除parent / clone2上的硬链接,但将目录child1和文件child1 / baz.txt单独保留。
另一个解决scheme是使用bindfs https://code.google.com/p/bindfs/可以通过端口安装:;
sudo port install bindfs sudo bindfs ~/source_dir ~/target_dir