【发布时间】:2010-11-28 18:52:42
【问题描述】:
【问题讨论】:
-
如果您对如何从命令行以用户身份访问此功能感兴趣,则应该在 SuperUser 上。如果您想以编程方式进行操作,那就另当别论了:-)
【问题讨论】:
如果有人感兴趣,我已将建议的答案打包在 Git 存储库中:https://github.com/selkhateeb/hardlink
安装后,创建一个硬链接:
hln source destination
我还注意到unlink 命令在 Mac OS X v10.6 (Snow Leopard) 上不起作用,所以我添加了一个取消链接的选项:
hln -u destination
要安装硬链接,请使用Homebrew 并运行:
brew install hardlink-osx
【讨论】:
brew install hardlink-osx
sudo
不幸的是,Apple 已经削弱了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;
}
以弗里曼为例,
$ gcc hunlink.c -o hunlink
$ echo "foo bar" > child1/baz.txt
$ ./hunlink parent/clone2
将删除 parent/clone2 处的硬链接,但保留目录 child1 和文件 child1/baz.txt。
【讨论】:
resource busy。硬链接是使用绑定创建的
另一种解决方案是使用可通过端口安装的 bindfs https://code.google.com/p/bindfs/:
sudo port install bindfs
sudo bindfs ~/source_dir ~/target_dir
【讨论】: