ひとりぶろぐ

価値ある情報をユーザー視点で発信するブログ

OS XのFinderでファイルの右クリックからシェルスクリプトを実行できるようにしたら非常に便利だった

   

Ubuntuの標準ファイルマネージャのNautilusには、選択中のファイルをコマンドに引き渡す機能があります。

~/.gnome2/nautilus-scripts/ 以下に置いたスクリプトが、メニューから実行できるのでよく使っていました。ファイラー世代であるため、僕はこういう機能が大好きです。

Twitpicuploader03

OS XのFinderにも同様の機能があればなぁと思っていたのですが、標準機能であるAutomatorでもできるんですね。(続きは[Read More]から)

Automatorで「ファイル>新規」を選び、「サービス」を選択。

Skitched 20150109 111901

検索窓に「シェル」と打ち込んで、出てきた「シェルスクリプト実行」を右の領域にドラッグ。

Skitched 20150109 112043

SPONSORED LINK


Finderの選択項目を処理したいので、

  1. 「”サービス”は、次の選択項目を受け取る」を「ファイルまたはフォルダ」に
  2. 「検索対象」は「Finder」に
  3. 「入力の引き渡し方」は「引数として」に

こんな設定に。

Skitched 20150109 112411

ここが重要ですが、エディタのところを右クリックして、自動変換を全部オフにします。さもないと、シングルクオート、ダブルクオートが引用記号に自動変換されるなどで、シェルスクリプトが動かなくなります。一体何を考えているんでしょうか。

Skitched 20150109 112816

Skitched 20150109 113301

シェルスクリプトの中身はこんな感じです。Finderで選択しているGPXをKMLに変換するスクリプトです。

# (0)
line_color="ff0000ff"
line_width="3"
gpsbabel="/Applications/GPSBabelFE.app/Contents/MacOS/gpsbabel"

# (1)
for f in "$@"
do
	# (2) (3)
	if [ -f "$f" ]; then
		# (4) (5)
		case "$f" in
          	*\.[gG][pP][xX])
			# (6)
			dir=`dirname "$f"`
			# (7)
			file=`basename "${f%.[gG][pP][xX]}"`.kml
			# http://www.gpsbabel.org/htmldoc-development/fmt_kml.html
			# (8)
			${gpsbabel} -N -t -i gpx -f "$f" -x simplify,count=1000 -o kml,deficon=,trackdata=1,nolabels=1,labels=0,points=0,line_color=${line_color},line_width=${line_width} -F "${dir}/${file}"
			;;
		esac
	fi
done
  • (0)スクリプト中で使われる、後で変更したくなると思われるものを変数化して最初に定義しています
  • (1)Finderで選択した(複数)ファイルのフルパスが、(一つずつ)$fとして渡されてきます
  • (2)$fには空白を含むフルパスが渡されてくる可能性があるので、必ず”$f”とクオートで囲みます
  • (3)最初に、「if [ -f “$f” ]; then」でディレクトリを弾いています
  • (4)拡張子gpxを持つファイルだけを処理対象にしたいので、それ以外を弾いています
  • (5)拡張子は、gpxだったりGPXだったりするので、その両方を対象にするため「*\.[gG][pP][xX])」というワイルドカードを使用
  • (6)処理対象のファイルを渡すgpsbabelには、入力ファイルと出力ファイルを指定する必要があります。まず、変数dirにgpxファイルがあったディレクトリを代入
  • (7)入力ファイルのファイル名hoge.gpxから、ファイル名hoge.kmlを作って変数fileに代入。「${f%.[gG][pP][xX]}」は、フルパス$fから、拡張子gpxを大文字小文字問わない形で削除するbashの表現です
  • (8)ここまでで作った変数を組み合わせてgpsbabelのコマンドラインを作り、実行しています。空白が含まれる可能性があるので、パスはダブルクオートで囲みます

Finderからは、GPX以外のファイル、フォルダなども渡されてくるため、それを弾いた上で実行しています。選択されたファイルにGPX以外のものが含まれていても、それは無視されます。あくまでも拡張子だけの判定ですが。

Command+S、ないしは「ファイル>保存」を選択すると、名前の決定を迫られるので、今回は「GPX2KML」という名前で保存しました。これでもう、Automatorは終了してOK。

Skitched 20150109 115225

既にGPXを右クリックすると「サービス>GPX2KML」が実行できるようになっています。

Skitched 20150109 115633

「システム環境設定>キーボード>ショートカット>サービス」から不要なメニュー項目を隠すことができ、「システム環境設定>キーボード>ショートカット>サービス>GPX2KML」でキーボードショートカットを割り当てることもできます。

Skitched 20150109 121551

作ったものは「/Users/ユーザ名/Library/Services」にあるため、修正が必要なときは、これをAutomatorで開きます。作ったサービスを削除したい場合は、ここから取り除きます。

Skitched 20150109 115843

ちなみに、今回作ったGPX2KMLは、バージョンアップしてGPXファイルを受け付けなくなってしまったGoogle MapsのMy Maps対策です。

 - OS X