如何在Mac OS X中创建一个目录的硬链接?
这个功能已经被添加到他们的文件系统中Mac OS X v10.5(豹纹)(为了时间机器),但我没有找到任何有关从命令行实际使用它的信息。
如何在Mac OS X中创建一个目录的硬链接?
这个功能已经被添加到他们的文件系统中Mac OS X v10.5(豹纹)(为了时间机器),但我没有找到任何有关从命令行实际使用它的信息。
如果有人感兴趣,我已经将建议答案打包到了一个Git存储库中:https://github.com/selkhateeb/hardlink
安装完成后,使用以下命令创建硬链接:
hln source destination
我还注意到在Mac OS X v10.6(Snow Leopard)上,unlink
命令无法工作,因此我添加了一个选项以进行解除链接:
hln -u destination
要安装 Hardlink,请使用 Homebrew 并运行:
brew install hardlink-osx
sudo
,似乎我仍然会收到“操作不允许”的错误。 - Swivel不幸的是,苹果削弱了ln
命令。 您可以使用以下程序创建指向目录的硬链接:
#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
回答the_undefined的问题,如何删除一个硬链接到目录而不删除它链接到的其他目录的内容:据我所知,使用内置命令无法从命令行完成此操作。然而,以下这个程序(受Freeman帖子启发)可以完成此操作:
#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;
}
继续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