63

Mac OS Xでディレクトリへのハードリンクを作成するにはどうすればよいですか?

この機能はMacOSX v10.5 (Leopard)(Time Machine用)のファイルシステムに追加されましたが、コマンドラインから実際に使用するための情報を見つけることができませんでした。

4

4 に答える 4

86

誰かが興味を持っている場合は、提案された回答を 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
于 2011-02-25T14:56:45.080 に答える
74

残念ながら、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
于 2009-10-10T11:32:58.760 に答える
17

リンクされている他のディレクトリの内容を削除せずに、ディレクトリへのハードリンクを削除する方法に関する 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

親/クローン2のハードリンクを削除しますが、ディレクトリchild1とファイルはそのままにしますchild1/baz.txt

于 2010-03-13T21:36:38.707 に答える
12

別の解決策は、ポート経由でインストール可能な bindfs https://code.google.com/p/bindfs/を使用することです。

sudo port install bindfs
sudo bindfs ~/source_dir ~/target_dir
于 2013-02-12T21:41:45.030 に答える