2011年11月28日月曜日

EPUB をフォルダ展開するサービスを Automator で作る

EPUB ファイルは、その構成物を Zip でまとめたもんやけん、EPUB の内部構成等を確認したい場合は、Zip アーカイヴを展開すればよい。
 ふつうの Zip ファイルであれば拡張子が .zip であり、Finder からダブルクリックすれば関連付けられたアーカイヴ展開ツールが起動してフォルダ展開してくれるだろう。ほなけど EPUB ファイルは拡張子 .epub であり、ファイルをダブルクリックしたところで EPUB 閲覧アプリケーション等がインストールされていればそれが起動し、インストールされていなければどのアプリケーションを用いてファイルを開くかを尋ねてくるダイアログ等が表示されるだけ。
 ほなけん、EPUB ファイルを展開したい場合は、
  • あらかじめアーカイヴ展開ツールの GUI を起動させ、そこへ EPUB ファイルを読み込ませる
  • EPUB ファイルの拡張子を .zip に変更してからダブルクリックでアーカイヴ展開ツールを起動する
  • $ unzip <epubfile.epub> 等のコマンドライン操作を行う
等の手段を用いることになる。

 めんどくさい。
 いちいちこんなことをやるのはめんどくさいけん、Automator を使って EPUB をフォルダに展開するサービスを作る。

 Automator を起動し、新規作成のダイアログで「サービス」を選ぶ。「"サービス"は、次の選択項目を受け取ります」には「ファイルまたはフォルダ」を、「検索対象」には「Finder」を選択する。
 用いるアクションは「シェルスクリプトを実行」のみ。「シェル」には「/bin/bash」を選択して、以下のようなシェルスクリプトを入力する。
for filePath in "$@"
do
  workingDir=${filePath%/*}
  filename=${filePath##*/}
  extension=${filename##*.}
  filenameWithoutExtension=${filename%.*}
  cd "$workingDir"
  if [ $extension != epub ] ; then continue; fi
  if [ -e "$filenameWithoutExtension" ] ; then continue; fi
  mkdir "$filenameWithoutExtension"
  unzip "$filename" -d "$filenameWithoutExtension"
done
 これで完成。かんたんですね。

 保存すると ~/Library/Services に保存される。Finder から EPUB ファイルを選択してコンテキストメニュー(右クリック or Control + クリック)かアプリケーションメニューの「サービス」に保存した Automator ワークフローがあるけん、それを選択すればフォルダに展開してくれる。
 仕様は以下の通り。
  • EPUB ファイルがあるフォルダに EPUB ファイルと同名のフォルダを作り、そこに中身を展開する
    • すでに同名のフォルダがある場合はなにもしない
  • 拡張子 .epub 以外のファイルからこのサービスを呼び出してもなにもしない
  • 複数の EPUB ファイルを一気に展開できる

0 comments:

コメントを投稿