里芋

From Usipedia
Jump to: navigation, search

Windowsではファイル名は(制限以内なら)どんなに大きくなっても0Bです.それを利用してファイルを「圧縮」するRubyスクリプトを作成しました.ファイル名に2バイト文字が使えるので1024進数などを表現すればさらなる時を超えた圧縮が可能ですが,面倒なのでやってません.このスクリプトは16進数を利用しています.

Contents

ネタ元

どんな感じ?

SatoimoChange.gif

最初73KB → 「圧縮」後は0KB.すごい!!! (さらにZIP圧縮すると...558KB)

SatoimoDetail.gif

圧縮後の様子.見事に全て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

追記

Namespaces
Variants
Views
Actions
Categories