한글 zip 파일 풀기

9.04 까지만해도

unzip 명령어에 -O 라는게 있어서
unzip -O cp949 파일명
이런식으로 한글파일도 깔끔하게 풀수있었다 ..
근데 9.10에서는 이게 사라졌다!!..(그냥은 안된다 뭐 옵션줘서 컴파일해야되는거로앎)
우분투 채널 보니까 스크립트를 만들어서 쓰더라 (인코딩변환후 리네임방법)
perl과 ruby 스크립트중
 ruby가 맘에들어 ruby를 쓰기로했다.
#!/usr/bin/ruby
# libzip-ruby1.8 패키지를 설치한 후 사용할 수 있습니다.
# 사용법: $ ruby unzip_cp949_to_utf8 zipfile.zip
require 'fileutils'
require 'zip/zip'
require 'zip/zipfilesystem' # ruby 1.8.x
require 'iconv'

def unzip
   Zip::ZipFile.open(ARGV[0]) do |zipfile|
      zipfile.each do |f|
         # libzip-ruby1.9 아직 없음. 그래서 아래 문장 주석 처리
         #utf_string = f.name.encode("utf-8") # for ruby1.9 or higher
         # cp949 파일 이름을 utf-8로 변환
         utf_string = Iconv.conv("UTF-8", "CP949", f.name) # for both ruby1.8.x and ruby1.9.x
         FileUtils.mkdir_p(File.dirname(utf_string))
         zipfile.extract(f, utf_string)
         puts utf_string
      end
   end
end
unzip

unzip

그냥은 안된다 …
sudo apt-get install rubygems  로 루비 gem을 설치후
gem install zip/zip  으로 zip 라이브러리를 설치해준다
그다음에 네번쨋 줄쯤에 require rubygems 를 해주면 잘된다
삽질하고나서 읽어보니까 libzip-ruby 한방이면 되는거같기도하다 ;..(설명서를 읽자!)
http://ubuntu.or.kr/viewtopic.php?p=44412#p44412
Debian 8, ruby 2.1 에서는
sudo gem install zip iconv
가 필요
————————————-
업데이트
루비 2.1
#!/usr/bin/ruby
require 'fileutils'
require 'zip'

def unzip
	Zip::File.open(ARGV[0]) { |zipfile|
		zipfile.each  {|f|
			# cp949 파일 이름을 utf-8로 변환
			utf_string = f.name.force_encoding("CP949").encode("UTF-8", :invalid => :replace, :undef => :replace, :replace => "_") # for ruby1.9 or higher
			FileUtils.mkdir_p(File.dirname(utf_string))
			#zipfile.extract(f,utf_string)
			f.extract(utf_string)
			puts utf_string
		}
	}
end
unzip

 

Leave a Reply

Your email address will not be published. Required fields are marked *