質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Q&A

解決済

1回答

5013閲覧

MacOSでディレクトリへのハードリンクを作りたい

taro_nii_chan

総合スコア207

terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

0グッド

0クリップ

投稿2019/03/19 07:29

編集2019/03/21 00:51

環境

macOS High Sierra
バージョン 10.13.6
MAMP: Version 5.2 (351)

動機

MAMPを使っていて、termialでcdコマンドでhtdocs/ディレクトリに移りたい事がよくあります。
デスクトップにhtdocs/へのショートカットを作ってあるのでfinderからhtdocs/へ移ることは簡単なのですが、terminalの場合は毎回

bash

1cd /Applications/MAMP/htdocs/

と打たないといけません。ちょっとした手間です。

デスクトップに作ったhtdocsはシンボリックリンクなので、cd ~/Desktop/htdocsと打つと

bash

1bash: cd: htdocs: Not a directory

とはじかれます。
ググっても大抵「ディレクトリへのハードリンクは出来ません」と書いてあります。

ところが色々探しているうちにhlnというコマンドをインストールすれば可能だという話にたどり着きました。
hlnに関してはこの質問の下の方に「追記」としてURLを載せてあります。)

これが出来れば更に短く

bash

1cd ~/htdocs/

だけでhtdocsにたどり着けます。

ということでhlnをインストールしてみたのですが、思うように行っていません。

hln のインストール

terminalで以下のコマンドを打ってhlnをインストールしました。

bash

1~/hln_test  brew install hardlink-osx 2==> Downloading https://homebrew.bintray.com/bottles/hardlink-osx-0.1.1.high_sierra.bottle.tar.gz 3Already downloaded: /Users/****/Library/Caches/Homebrew/downloads/3b03a9de6c59e921a73bf4bdf7db3da8d69973288ae0fd7ca75e69b6b9a72741--hardlink-osx-0.1.1.high_sierra.bottle.tar.gz 4==> Pouring hardlink-osx-0.1.1.high_sierra.bottle.tar.gz 5==> Caveats 6Hardlinks can not be created under the same directory root. If you try to 7`hln source directory` to target directory under the same root you will get an error! 8 9Also, remember the binary is named `hln` due to a naming conflict. 10==> Summary 11???? /usr/local/Cellar/hardlink-osx/0.1.1: 4 files, 12.2KB 12~/hln_test 

hln の実行

以下のようにhlnコマンドを叩いてるのですが、「Operation not permitted」と怒られてしまいます。

bash

1~/hln_test  tree 2. 3├── dirA 4│   └── tmp.txt 5└── dirB 6 72 directories, 1 file 8~/hln_test  hln dirA dirB/dirA 9hln: Operation not permitted 10~/hln_test 

#質問
hlnのインストールは上手く行っているように見えます。
インストール中に言われている

hln source directory to target directory under the same root you will get an error!」

もソースディレクトリは~/hln_test/dirAでターゲットディレクトリは~/hln_test/dirB/dirAなので同じルートデェレクトリでなく、問題ないと思います。

何がいけないのでしょう?

hlnにこだわらなくても別の解決方法があれば教えてください。

ちなみにln -Fも試してみたのですが

bash

1~/hln_test  ln -F dirA dirB/dirA 2ln: dirA: Is a directory 3~/hln_test 

でした。

追記 2019.3.19(tue) 20:26

hlnに関する出典は
https://recordnotfound.com/hardlink-selkhateeb-64697
にあります。

こちらにこのコマンドの動機・名前について・必要条件・インストール・使い方・制限などが英語ですが説明されています。参考になさってください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

回答がないようなので...

検索してみると What is the Unix command to create a hardlink to a directory in OS X? が見つかりました。

ここにディレクトリのハードリンクできた条件が書かれていますが、満たしていますか?

  1. The file system must be journaled HFS+.
  2. The parent directories of the source and destination must be different.
  3. The source’s parent must not be the root directory.
  4. The destination must not be in the root directory.
  5. The destination must not be a descendent of the source.
  6. The destination must not have any ancestor that’s a directory hard link.

これを満たすようにして、テスト環境の macOS Sierra (10.12.6) で試してみました。

(以下動作確認)

質問に追記されている URL の Manually compiling に github リンク( https://github.com/selkhateeb/hardlink.git )があったので、確認すると 実質、hln.c 1ファイルだけだったので、ソースコードを読みつつ、gcc -o hln hln.c でコンパイルしてみました。

できた実行ファイルのあるディレクトリ /Users/user/test/ で、テストしてみました。

test/ |- hln.c |- hlc |- test1/ |- test2/

の環境で、test/ にいる状況で、./hln test1/ test2/target-dir と実行すると

test/ |- hln.c |- hlc |- test1/ |- test2/ |- target-dir

となりました。

ls -li ./ test2/ としてみると

.: total 32 84260392 drwxr-xr-x 6 user staff 204 3 21 17:07 ./ 4728998 drwx------ 69 user staff 2346 3 21 16:53 ../ 84260607 -rwxr-xr-x 1 user staff 9152 3 21 16:59 hln* 84260598 -rw-r--r-- 1 user staff 1714 3 21 16:59 hln.c 84260492 drwxr-xr-x 2 user staff 68 3 21 16:57 test1/ 84260494 drwxr-xr-x 3 user staff 102 3 21 17:07 test2/ test2/: total 0 84260494 drwxr-xr-x 3 user staff 102 3 21 17:07 ./ 84260392 drwxr-xr-x 6 user staff 204 3 21 17:07 ../ 84260492 drwxr-xr-x 2 user staff 68 3 21 16:57 target-dir/

となり、test1 と target-dir の i-node が同じなので、間違いなくハードリンクされているようです。

hln のプログラムは問題なさそうなので、先にあげた6項目をチェックしてみて、ハードリンクを作成できる条件を満たしているか確認してください。

また、stackoverflow に hlink.c や hunlink.c のコードが書かれているので、このコードをコンパイルして、実行してみる方が動作するのか判断がしやすいかもしれません。

投稿2019/03/21 08:32

CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taro_nii_chan

2019/03/21 09:29

回答ありがとうございます。 条件の1番目のファイルシステムが APFS でした。 stackoverflow の hlink.c をコンパイルしても ```bash ~/hln_test  ./hlink dirA dirB/target-dir link: Operation not permitted ~/hln_test  ``` でした。 それとは別に https://dorienherremans.blogspot.com/2017/03/creating-hard-link-to-directoryfolder.html というサイトを見つけたのでそれに従って ```bash ~/hln_test  brew install coreutils ``` をした後、下のコマンドを叩いてみましたが、結果はご覧のとおりでした。 ```bash ~/hln_test  sudo gln -d dirA dirB/dirA Password: gln: failed to create hard link 'dirB/dirA' => 'dirA': Operation not permitted ~/hln_test  ``` APFS であることは致命的なんでしょうか?
CHERRY

2019/03/21 10:06 編集

github の issue の https://github.com/selkhateeb/hardlink/issues/31 に > From Apple's APFS FAQ: > > Does Apple File System support directory hard links? > > Directory hard links are not supported by Apple File System. All directory hard links are converted to symbolic links or aliases when you convert from HFS+ to APFS volume formats on macOS. と書かれていると投稿されていて、解決していないようなので、おそらくはAPFS では動作しないのではないかと思われます。
taro_nii_chan

2019/03/21 20:01

諦めます。 ありがとうございました。
AOKINAO

2019/03/21 23:26

もともとディレクトリーへのハードリンクはかなりイレギュラーで、HFS+以外のファイルフォーマットではサポートされていないのが普通だったはずです。これは、あるディレクトリーのハードリンクをその子孫ディレクトリに作ると、コピーするときに永遠に同じディレクトリーをコピーし続けるなどの循環を避けるためだったと記憶しています。  HFS+では、Time Machineを実現するためにディレクトリーへのハードリンクを作ったのですが、循環が発生しないよういろいろ制限があるのだと思います。
taro_nii_chan

2019/04/04 06:50

コメント、気づかず遅くなってすみません。なるほど、そうなんですね。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問