
Dropbox 内のフォルダ・ファイルをコンテキストメニューから同期・非同期する Automator クイックアクション
✅ 選択型同期
Dropbox には「選択型同期」という機能があり Dropbox 内であっても同期をさせないフォルダの指定をするができます。
Github へコミットしているプロジェクトであれば `.git` フォルダを Dropbox に同期させる意味はあまりないですし、`node_modules` や `bower` など、ベンダーからダウンロードしたライブラリを蓄積するフォルダは容量はそれほど大きくはありませんがファイル量が膨大なため、同期させるとシステム全体が重くなってしまう場合もあります。
選択型同期を使うには通常、Mac 用 Dropbox アプリのメニュー内か「選択型同期 」ウインドウを使ってアクセスしますが、これの使い勝手が本当にいまいちです。
というのも。
「既に Dropbox へ同期されたフォルダ」しか表示されない仕様のため、一度は同期しなくてはならない。
選択型同期して✔︎を外した場合=同期をしないという設定になりますが、同時に Mac ローカルからそのディレクトリを削除されてしまいます。
前者は許容できたとしても、後者は勘弁してほしい…。同期させないからといってシステムから削除してほしいわけではない。

🗂 拡張ファイル属性 “com.dropbox.ignored”
Dropbox に同期させないようにするには、先程の「選択型同期」とは別に、あまり知られていないかもしれませんが「拡張ファイル属性」を使って UNIX コマンドからコントロールする方法があります。
Finder 上からは確認できないのですがフォルダやファイルには拡張ファイル属性と呼ばれるメタデータを追記することが可能です。
スマートフォンで撮影した写真に付いている EXIF 情報もこの拡張ファイル属性の一つですが、Dropbox の場合フォルダやファイルに com.dropbox.ignored という拡張属性が付いている場合、それを同期の対象から外すことが可能です。
xattr -w com.dropbox.ignored 1 (フォルダまたはファイルのパス)
方法としては上記のとおりで、ターミナルから実行することですぐさま同期をオフにすることができます。ポイントとして、「選択型同期」ではフォルダの指定はできてもファイル単体での指定はできませんでしたが、拡張ファイル属性を扱う場合にはファイルへの指定も可能です。
もしまた Dropbox へ同期させる必要ができた場合には、拡張ファイル属性を削除するだけで OK です。
xattr -d com.dropbox.ignored (フォルダまたはファイルのパス)
フォルダやファイル内部に変更を加えるものではないので安心して扱うことができます。
また、拡張属性で非同期化した場合Dropbox内でファイルやフォルダを移動 or コピーしても、拡張属性は維持されますので引き続き非同期の状態を保ことができます。
🤖 Automator の出番です
さて。ここで記事のタイトルに立ち返るわけですが。
ターミナルから拡張ファイル属性に変更を加えることでも Dropbox への同期設定を変更することがわかりましたが、フォルダやファイル一つ一つにコマンドを実行しなければなりませんし、コマンド自体も忘れがちです。
Finder のコンテキストメニュー(右クリックメニュー)から実行できれば便利なのに…
と、思った方。それがだいたい出来るのが Mac です。

OS 標準で付いている Automator アプリを使ってファインダーのクイックアクション(サービス)を作ってみました。
構成としては非常にシンプルで、Finder で指定した項目に対して先程のシェルコマンドを連続して実行するのみのアクションです。

for f in "$@"; do
declare -i FLAG
FLAG=`xattr -p com.dropbox.ignored "$f"`
if [ $FLAG -eq 1 ]; then
xattr -d com.dropbox.ignored "$f"
else
xattr -w com.dropbox.ignored 1 "$f"
fi
unset FLAG
done
こちらを .workflow ファイルとして保存したのが以下です。
🖥 インストール
Dropbox で同期する・非同期にする.workflow をご自身の Mac の以下のフォルダに設置してください。それだけ。アンインストールに関しても削除するのみです。
/Users/(ユーザー名)/Library/Services

🔧 使い方
同期させたくないフォルダやファイルを選択(複数選択もいけます)後、右クリックして現れたコンテキストメニュー内から Dropbox で同期する・非同期にする をクリックするのみです。

するとクリック後すぐに Dropbox 側の処理がはじまり、同期状態だったフォルダやファイルが非同期の状態となったことがわかります。

Dropbox で同期する・非同期にする メニューはトグルスイッチとして機能しますので、非同期状態のものを再度同期させたくなった場合にはもう一度メニューを実行するのみです。
Automator べんりー🤖
いいなと思ったら応援しよう!
