僕は電子化したZIPアーカイブを、iTunes風のフォルダ階層に整理しています。
著者名のフォルダの中に書名のZIPアーカイブを、以下のようなイメージで配置しています。
著者A 書名a.zip 書名b.zip 著者B 書名c.zip 書名d.zip
先日リリースしたZippedImages Etceteraに必要なタグの設定を省力化するために、上記の状態に整理された書庫ファイルをバッチ処理するスクリプトを書きました。
以下のタグを自動設定します。
- ZIPアーカイブを含むディレクトリ名を著者名として設定
- ZIPアーカイブのファイル名から拡張子を除去した文字列を書籍名として設定
- ZIPアーカイブに含まれる最初のJPEGファイルをサムネイルとして設定
つまり、発売日以外のタグを全部自動設定できます。
ZIPアーカイブの整理方法は人それぞれだと思いますが、スクリプトを修正してやれば色々なケースにも対応できると思います。
例えばファイル名に著者名と書籍名を両方含めてフラットに管理している場合でも、今回のスクリプトを修正すれば対応できると思います。
使い方
このスクリプトはZip/Rubyを利用しています。ターミナルからRubyGemsを使って、インストールしてください。
gem install zipruby
あとは、タグを付けたいZIPアーカイブを含むディレクトリをスクリプトに渡してやってください。
再帰処理で、含まれるZIPアーカイブを全部処理します。
ruby ziupdate.rb <ZIPアーカイブを含むディレクトリ>
以下がスクリプトになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #!/usr/bin/ruby require "find" require "rubygems" require "zipruby" Find.find(ARGV[0]) do |file_path| file_path = File.expand_path(file_path) if /\A[^.].*\.zip\z/ =~ File.basename(file_path) author = File.basename(File.dirname(file_path)) title = File.basename(file_path, ".zip") Zip::Archive.open(file_path) do |zip_file| thumbnail = zip_file.map {|entry| entry.name}.sort.find {|name| /\A[^.].*\.(jpg|jpeg)\z/ =~ File.basename(name)} meta = "Title: \"#{title}\"\nAuthors:\n - \"#{author}\"\nThumbnail: \"#{thumbnail}\"\n" zip_file.add_or_replace_buffer("ZippedImages.yaml", meta) print meta end end end |
