先日,Dropboxから,今後はシンボリックリンクのファイルは同期しないようにする旨のアナウンスが来ていた.
Macでシンボリックリンクを使った 複数PCのDesktopをDropboxを使って同期する方法 が使えなくなってしまい頭を抱えてしまった.
試行錯誤の末,bindfsを使えば解決するばかりか,より良い実装にできそうということがわかったので,メモを残す.
悩んだ過程は以下の通り.
シンボリックリンクでDropboxは同期してくれない.
Googleドライブ,OneDriveも試したが,同じ仕様.
SugerSincはできるっぽいけど無料は90日限定.
ハードリンクならどうか.
ハードリンクは,High Sierra以降はファイルシステムとしてAPFSが強要されるため,ディレクトリのハードリンクは不可.
逐一ファイルごとにハードリンクを張るスクリプトを組むのは面倒臭すぎる...
結局たどり着いたのが,bindfs.
bindfs は FUSEの仕組みを使って,任意のファイルシステムをマウントできるものらしい.
とりあえずインストール.
brew cask install osxfuse
brew install bindfs
使い方は簡単で,
bindfs somedir/ mountdir/
とするだけ.
オプションを付けると色々とポリシーを変えたりできるらしい.
シンボリックリンクで実現していたときと同様に,DesktopをDropbox内にマウントしても,マウントされたファイルは同期対象にはならないので,Dropboxディレクトリ自体をDesktopディレクトリにマウントしてしまおう.
(このような使い方はAppleは想定していないと思うので,自己責任で)
以下のコマンドを打つと,Dropboxディレクトリに入っているものが,Desktopに表示されるようになる.
bindfs -o volname=Desktop ~/Dropbox\ \(個人用\)/ ~/Desktop/
アンマウント(ディスクを取り出し)すると,元のDesktopに戻ります.
再度マウントするとちゃんと元の配置に戻るようになっている.
当然,再起動するとマウントされていない状態に戻るので,コマンドを打ち直す必要があります.
また,副作用として,ディスクとして扱われるのでDesktop外にファイルをドラッグすると,移動ではなくコピーになってしまいます.
コマンドキーを押しながらドラッグすると,移動になる(ただし,厳密には移動ではなく,コピーしてから削除なので,大きなファイルを移動するときはDropboxから直接動かしたほうが良い).
これでめでたく,複数PCのDesktopを同期することができました.