📋

macのfinderでディレクトリのパスをコピーする方法

Windows のファイルエクスプローラではフォルダを表示したときに常に上の部分に現在のパスが表示されていますが、Mac の Finder ではそれが表示されていません。これを右クリックからコピーする方法を紹介します。

# Mac ではパスのコピーが面倒

# 右クリックメニューに「パスをコピーする」がない

Windows のファイルエクスプローラではフォルダを表示したときに常に上の部分に現在のパスが表示されていますが、Mac の Finder ではそれが表示されていません。
ここから例えばパスをコピーして、ターミナルに入力したりしようとすると、少し面倒なことになります
現在のバージョン(Big Sur)では、ファイルやディレクトリの右クリック(2 本指タップ)には「パスをコピー」といった項目はありません。

実は、ファイルを選択した場合は、option キーを押すとコンテキストメニューが変換されてパスをコピーできるようになります。

しかしディレクトリのパスをコピーすることはできません。上記のファイルパスコピーを使い、dirnameコマンドに渡せばディレクトリのパスを取得できますが、わざわざそれをやるのは面倒です。

今回は、その機能を Service Station というアプリで実装しました。

# Service Station を使うとメニューに機能を追加できる

Service Station は、右クリックのコンテキストメニューに機能を追加できるアプリです。
App Store からダウンロードできます。

Service Station
App Store (opens new window)

なお、Service Station は、無料版では、機能追加数に制限があります。より多くの機能を追加する場合は課金が必要です。

こんな感じでメニューに項目を追加できます。

image

# Service Station 基本説明

# 初期設定

Service Station の画面はこんな感じです。

img

日本語化されてはいませんが、左側がルールの対象となるもの、右側が関連付けたいスクリプトです。

右クリックメニューの拡張には権限が必要なので、System SetupタブのFinder Extensionから設定アプリへ飛び、Service Station の実行を許可しておきましょう。

# スクリプトを配置する

今回は、Foldersに自分で作成したスクリプトを設定します。

スクリプト置き場に制限があるので、確認しておきましょう。

System SetupタブからOpen Application Scripts Directoryボタンを押して飛べる先が専用のスクリプト置き場です。また、Sample Scriptsボタンから飛べるディレクトリにはサンプルのスクリプトが保存されています。基本はこれを改造する形で開発すれば良いでしょう。

# Service Station でスクリプトを実行する

# パスをコピーするスクリプト

Sample Scriptsの中からShellScript.shをスクリプト置き場へコピーしましょう。そのままの名前でも良いですが、ここではcopy-path.shとリネームしました。当然ですが、拡張子は変えないようにしてください。

image

このファイルを開いて編集します。かんたんな修正なので、テキストエディットで開いてしまって良いと思います。

サンプルスクリプトは引数の使用方法を示してくれています。

targetURL引数に現在のパスが入ってきているので、これ以外を扱う箇所は適当に消し、コピーするコマンドを追加します。

#!/bin/bash
TARGETED_URL=""

IFS=""
while [[ $# -gt 0 ]]; do
    arg=$1
    case $arg in
        -targetedURL)
            TARGETED_URL=$2 && shift && shift
            ;;
        *)
            SELECTED_ITEM_URLS+=($1) && shift
            ;;
    esac
done

echo -n "${TARGETED_URL}" | pbcopy

exit 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

これで完成です。Service Station に戻りましょう。

Service Station のRulesFoldersが選択されている状態でMenu Itemsの下の+をクリックし、さらにAdd scriptをクリックしてください。スクリプト置き場のディレクトリが開かれるので、先ほど編集したcopy-path.shを選択します。

img

これで、ファインダーの適当な場所で右クリックしましょう。メニューにcopy-pathが追加されているはずです。実行すれば、現在のバスがクリップボードへコピーされます。

# 注意点

コピーしたパスへcdしたい場合、Application Supportのようにディレクトリ名にスペースを含む場合にはクォーテーションが必要になるので注意してください。
このユースケースが多い場合は、はじめからクォーテーションでくくったパスをコピーするスクリプトに変更しても良いと思います。

# 現在のディレクトリを直接ターミナルで開くスクリプト

単純に現在のディレクトリをターミナルで開きたいと言う場合は、Automator workflow を使ってしまうのも簡単です。

Sample Scripts中から、workflow.workFlowをスクリプト置き場へコピーしてください。ここではopen-in-terminal.workflowとリネームしました。

右クリックから Automator で開いて編集します。こちらの場合は、既存の引数確認は使わないので全て削除してください。

image

今回はターミナルで開きたいので、一番上の「Finder 項目を開く」の「アプリケーションを開く」の部分を「ターミナル.app」に変更してください。

image

できたら保存し、Service Station から先程と同様にMenu Itemsに追加します。

これを実行すると、ターミナルの新規ウィンドウが開き、現在のディレクトリが開かれます。

個人的には、ターミナルで現在のディレクトリを開きたいという場合、現在のウィンドウや新規タブを使いたいことが多く、このやり方はあまり合いませんでした。ただ、ターミナルのウインドウが分割できても問題ない方は、こちらの方が手順が早く楽かもしれません。

# まとめ

以上、右クリックから、現在のディレクトリを開いたりパスをコピーしたりする方法でした。

こういう機能がデフォルトで提供されていないのはちょっと足りない気がしますが、好きにハックできのは楽しい点でもあります。こういうことができるのが、開発を学んでいて良いところですね。

Service Station は、画像やテキストなど、他のファイルを対象としたスクリプトを作ることもできます。気になった方はお試しください。
今後もいろいろとオートメーションに取り組んでいきたいと思います。