2012年9月5日水曜日

Automatorでシェルスクリプトを実行する [追記あり 2012/9/22]

インターネットで拾った画像を、自作のシェルスクリプトでフォルダごと無圧縮ZIPファイルとしてまとめたりしていました。でも、Terminalからコマンド操作するのが面倒なときがあります。
そこで、Finderで選択した項目を個別にZIP化(非圧縮)してくれるアプリケーションを、Automatorで作ってみました。実際は、自作のシェルスクリプトを呼び出すだけですが、少し試行錯誤をしました。[追記: 2012/9/22 無圧縮ZIPをターミナルで作成する記事を書きました]
Automatorを起動してアプリケーションを選択します。そして、ライブラリのFinderから「選択されたFinder項目を取得」を選び右側の領域にドラッグアンドドロップします。
次に、ライブラリのAutomatorから「シェルスクリプトを実行」を選び先ほどの項目の下にドラッグアンドドロップします。
そして、シェルは今回は/bin/bash、入力の引き渡し方法は「引数として」を選びます。
スクリプトのウィンドウには、渡されたFinder項目を"$f"としてechoするスクリプトが記入されていますので、それを自作のコマンドに置き換えます。
適当な画像フォルダを選択して、このワークフローの実行ボタンを押したら、以下の警告ダイアログが出ました。テスト時には別のアクションを入れて、実際に使うときは取り除けと出ていますが、OKすると選択したフォルダがZIPファイルに変換されました。
出来上がったZIPファイルを見たのですが、フォルダの階層がトップから含まれています。これは邪魔です。

そこで、スクリプトを以下のように修正しました。
ループ中で、Finder項目のUnixパス名から、ディレクトリ部分とZIP化対象部分を取り出しています。次に、ディレクトリに移動してからZIP化対象部分だけをシェルスクリプトに渡しています。今度は、ZIP化対象部分以下だけがZIPファイルに含まれていました。

これで基本機能を確認できたので、ワークフローをアプリケーションとして保存し、そのアイコンにフォルダをドラッグアンドドロップしたのですが、実行される気配がありません。Dockの対応アイコンを右クリックすると「アプリケーションが応答しません」と薄い字で表示されています。仕方がないので強制終了しました。その後、ウェブで調べるとどうもワークフローの先頭の「選択されたFinder項目を取得」はいらないようです。
上のように「シェルスクリプトを実行」だけを残して、アプリケーションとして保存し直したところ、ドラッグアンドドロップで動作するようになりました。

関連記事: シェルスクリプトをMacのアプリケーション化するシェルスクリプト

0 件のコメント:

コメントを投稿