catch

MacのFinderで開いているフォルダのパスをターミナルで取得する

ターミナルで、いまFinderで開いているディレクトリに素早く移動したいケースが度々あるので、ターミナルからディレクトリのパスを取得できるようにしてみました。

MacOSではAppleScriptの代わりにJavaScriptが使えるようになったので、JavaScriptを使用します。
ターミナルからはosascriptコマンドで-lオプションでJavaScriptを指定して実行できます。

# sample.js
console.log(‘hoge’);
osascript -l JavaScript sample.js

ファイルの作成

selectionというコマンドでパスを取得したいので、selectionという名前でファイルを作ります。(拡張子はつけません)

#!/usr/bin/osascript -l JavaScript

const finder = Application('Finder');
const getFullPath = (file) => {
  const path = [];
  while(true){
    name = file.name();
    if(name === 'Macintosh HD'){
      break;
    }
    else{
      if (file.kind() === 'フォルダ') {
        path.unshift(name);
      }
      file = file.container();
    }
  }
  return '/' + path.join('/');
};
finder.selection().map(getFullPath).join('\n');

説明

finder = Application(‘Finder’);
finder.selection();

で下記のようにパスまでの情報が返ってきます。

finder.selection()[0].name();

でファイル名が取得できます。

finder.selection()[0].kind();

で選択しているファイル/フォルダの種別が取得できます。

finder.selection()[0].container();

でひとつ上の階層に移動します。

ファイル/フォルダ名を取得し空の配列に追加し、階層をひとつ上に移動してファイル/フォルダ名を配列に追加する処理を、Machintosh HDにたどり着くまで繰り返します。
その後、配列を/区切りでで1つに繋げて、返します。
また今回はディレクトリのパスを取得したいので、ファイルを選択してた時はファイル名は取得せずに配置されているディレクトリ名から取得するようにしてます。

こちらの実装は下記の記事を参考にさせていただきました。
macOSのFinderで選択中のパスをターミナル上で取得する – Qiita

コマンドで使えるようにする

ファイルのパーミッションを755にします。
~/.binディレクトリを作成し、その中にファイルを入れます。(作成するディレクトリは何でも構いません。パスを追加する時に、作成したディレクトリを指定します)

bashrcを開き、パスを追加します。

export PATH=$HOME/.bin:$PATH

再読み込みします。

source ~/.bashrc

ターミナルでselection と叩くと、現在Finderで開いているディレクトリのパスが返ってきます。

cd "$(selection ~)"

とすると、Finderのディレクトリまで移動できます。
これも1つのコマンドにできると良いのですが、今回はそこまで対応してません。

Add Comment

本文

コメントはまだありません。

PAGE TOP