ということでまずはrarをzipにすることを考えてみた。
rubyの勉強がてら変換スクリプトをgoogle先生に相談しつつ組んでみました。
環境
- OS -- Windows (commandline)
- ruby 1.8.7 -- ruby-mswin32
- unrar.exe -- UnRAR for Windows
- zip.exe -- Windowsでzip.exeとunzip.exe
それぞれコマンドラインから使用できる状態にしておく
使用方法
$ ruby.exe rar2zip.rb [file.rar ...]
入力したrarファイルをzipに変換して出力します。
アーカイヴ名と内包するトップディレクトリ名が同じ場合、そのディレクトリ名を省略します。
rar2zip.rb
#!/bin/ruby -Ks require 'tmpdir' ## error. def failed(msg) puts "\nFailed!! -- #{msg}\n" abort end ## system command. def command(cmd) system cmd or failed "command failed.: #{cmd}" end ## usage. def usage print <<-EOS rar2zip.rb ver 0.1 Usage: [ruby.exe] rar2zip.rb file.rar ... EOS end ## main. usage if ARGV.size==0 ARGV.each do |input| puts "#{input} ..." failed "file is not RAR." unless File.extname(input)=~/\.rar$/i output = File.expand_path(input).gsub(/\.\w+$/,".zip") failed "ZIP file already exists." if File.exist?(output) Dir.mktmpdir("temp-",".") do |temp| command "unrar x -inul \"#{input}\" #{temp}" dir = temp + "/" + File.basename(input,".*") dir = temp unless File.directory?(dir) && Dir.entries(temp).size==3 Dir.chdir(dir) do command "zip -q -r \"#{output}\" *" end end end puts "Done."
所感
実装してて思ったのが、日本語ファイル名が意外と変換には厄介だということ。
文字化けしたり、途中でこけたりというアーカイバが結構あります。
大事なのは同じOSで、そのOS用にカスタムビルドしたツールを使うこと。
最初Cygwin上で実装しててはまりましたよ。ええ。
0 件のコメント:
コメントを投稿