Mac

Mac OSの「サービス」メニューからシンボリックリンクを作れるようにする

Mac OS(OSX)で、ファイルを選択した時の右クリック(コンテキストメニュー)の「サービス」で、ファイルやフォルダのシンボリックリンクを作れるようにする覚え書き。Automaterを使います。

シンボリックリンクとは、別名のファイルからオリジナルのファイルやフォルダへアクセスできるようにする仕組みです。Macでは、似たようなエイリアスがよく使われます。エイリアスはWindowsのショートカットと似たような機能です。

シンボリックリンクとエイリアスは似ていますが少し違います。エイリアスはMacOS、シンボリックリンクはUNIXの機能です。エイリアスはファイルパスだけでなく他の情報も保存するので、元のファイルが移動しても追従できたりする便利さがあります。一方、シンボリックリンクはファイルパスのみを保存するので、元のファイルが移動してしまうと無効なリンクになってしまいますがその分容量が軽いです。

また、シンボリックリンクはエイリアスにはない便利な点もあります。例えばイラレ(Illustrator)の配置画像にはオリジナルの代わりに指定してやることもできるし、ローカルでのサイト構築のテスト環境ではHTMLの外部参照ファイルとして、スクリプトやCSSのシンボリックリンクを使うこともできます。これらはエイリアスではできません。

ターミナルでシンボリックリンクを作成する

ターミナルを使ってシンボリックリンクを作成するにはln -sの後に元のファイルのパスと作成後のシンボリックリンクのファイルパスを指定します。各ファイルパスはスペースで区切って入力します。ターミナルでは、ファイルをドラッグすることでファイルパスを入力することもできます。

ln -s オリジナルのファイルパス 作成するシンボリックリンクのファイルパス

Automaterでサービスを作る

新しくサービスメニューを作るには、MacOSに付属のアプリケーション「Automater」を使います。起動して「メニュー › ファイル › 新規(command + N)」で新しくサービスを作成します。

MacOS › Automater › サービス

「次の選択項目を受け取る:」のプルダウンメニューを「ファイルまたはフォルダ」に変更します。

MacOS › Automater › サービス › 次の選択項目を受け取る:ファイルまたはフォルダ

左のライブラリ一覧から「シェルスクリプトを実行」をドラッグします。

MacOS › Automater › サービス › シェルスクリプトを実行

「入力の引き渡し方法:」のプルダウンメニューを「引数として」に変更して以下のシェルスクリプトを記述します。例では、シンボリックリンクのファイル名は、元のファイル名の後に「.symlink」を追加したものにしてますがまぁ何でもいいです。

for f in "$@"
do
	ln -s "$f" "$f".symlink
done

このコードでは、複数のファイルやフォルダを選択した場合はそれぞれのシンボリックリンクを作成します。

MacOS › Automater › サービス › シンボリックリンクを作るコード

「メニュー › ファイル › 保存(command + S)」でサービスを保存します。ファイル名は右クリック時に表示されるので分かりやすい名前がいいです。

MacOS › Automater › サービス › 名前を付けて保存

ファイルは、ユーザーフォルダの中のライブラリにある「Services」というフォルダに保存されます。編集する場合は、このファイルを開きます。


MacOS › サービスメニューでシンボリックリンクを作れるようにする

これでファイル選択時の右クリックでシンボリックリンクを作れるようになりました。シンボリックリンクの作成は、ファイルやフォルダの権限など問題が起きてエラーになることもあります。