Ubuntuの標準ファイルマネージャのNautilusには、選択中のファイルをコマンドに引き渡す機能があります。
~/.gnome2/nautilus-scripts/ 以下に置いたスクリプトが、メニューから実行できるのでよく使っていました。ファイラー世代であるため、僕はこういう機能が大好きです。
OS XのFinderにも同様の機能があればなぁと思っていたのですが、標準機能であるAutomatorでもできるんですね。(続きは[Read More]から)
Automatorで「ファイル>新規」を選び、「サービス」を選択。
検索窓に「シェル」と打ち込んで、出てきた「シェルスクリプト実行」を右の領域にドラッグ。
SPONSORED LINK
Finderの選択項目を処理したいので、
- 「”サービス”は、次の選択項目を受け取る」を「ファイルまたはフォルダ」に
- 「検索対象」は「Finder」に
- 「入力の引き渡し方」は「引数として」に
こんな設定に。
ここが重要ですが、エディタのところを右クリックして、自動変換を全部オフにします。さもないと、シングルクオート、ダブルクオートが引用記号に自動変換されるなどで、シェルスクリプトが動かなくなります。一体何を考えているんでしょうか。
シェルスクリプトの中身はこんな感じです。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。
既にGPXを右クリックすると「サービス>GPX2KML」が実行できるようになっています。
「システム環境設定>キーボード>ショートカット>サービス」から不要なメニュー項目を隠すことができ、「システム環境設定>キーボード>ショートカット>サービス>GPX2KML」でキーボードショートカットを割り当てることもできます。
作ったものは「/Users/ユーザ名/Library/Services」にあるため、修正が必要なときは、これをAutomatorで開きます。作ったサービスを削除したい場合は、ここから取り除きます。
ちなみに、今回作ったGPX2KMLは、バージョンアップしてGPXファイルを受け付けなくなってしまったGoogle MapsのMy Maps対策です。