里芋
From Usipedia
Windowsではファイル名は(制限以内なら)どんなに大きくなっても0Bです.それを利用してファイルを「圧縮」するRubyスクリプトを作成しました.ファイル名に2バイト文字が使えるので1024進数などを表現すればさらなる時を超えた圧縮が可能ですが,面倒なのでやってません.このスクリプトは16進数を利用しています.
Contents |
ネタ元
どんな感じ?
最初73KB → 「圧縮」後は0KB.すごい!!! (さらにZIP圧縮すると...558KB)
圧縮後の様子.見事に全て0KBですね!.
使い方
「圧縮」
ruby satoimo_compression.rb tukasa.jpg
「解凍」
ruby satoimo_extract.rb tukasa.jpg.0/
ソース
satoimo_compression.rb
#!/usr/bin/env ruby -Ks target_name = ARGV.shift output_count = 0 return FAILURE unless f = open(target_name).binmode output_dir = "#{File.basename(target_name)}.0" Dir.mkdir(output_dir) # ゆとりを持ってファイル名は64文字に制限する while(hoge = f.read(30)) msg = sprintf("%0.4d%s", output_count, hoge.unpack("H*")) open("#{output_dir}/#{msg}","wb").close output_count += 1 end
satoimo_extract.rb
#!/usr/bin/env ruby -Ks target_dir = ARGV.shift output_name = target_dir[0..(target_dir.length-4)] f = open(output_name, "wb") Dir.entries(target_dir).sort.each do |file| f.write ["#$1"].pack("H*") if /^\d\d\d\d(.*)$/ =~ file end f.close