Mac OS Xでディレクトリのハードリンクを作成する[複製]
質問
この質問にはすでに回答があります:
Mac  OS  Xのディレクトリへのハードリンクを作成するにはどうすればよいですか
この機能は、 Mac  OS  X  v10.5でファイルシステムに追加されました(Leopard)(タイムマシン用)ですが、コマンドラインから実際に使用するための情報が見つかりませんでした。
解決
残念ながら、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
他のヒント
誰かが興味を持っている場合、Gitリポジトリに提案された回答をまとめました: https://github.com / selkhateeb / hardlink
インストールしたら、次のコマンドでハードリンクを作成します。
hln source destination
unlink
コマンドがMac&nbsp; OS&nbsp; X&nbsp; v10.6(Snow&nbsp; Leopard)で機能しないことにも気づいたため、リンクを解除するオプションを追加しました:
hln -u destination
ハードリンクをインストールするには、 Homebrew を使用して実行します:
brew install hardlink-osx
リンクされている他のディレクトリのコンテンツを削除せずにディレクトリへのハードリンクを削除する方法についての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
はそのままにします。
別の解決策は、bindfs https://code.google.com/p/bindfs/ ポート経由でインストール可能:
sudo port install bindfs
sudo bindfs ~/source_dir ~/target_dir