반응형

윈도우에서 zip 파일로 한글 파일들을 묶으면 리눅스에선 깨져 보입니다.

그 이유는,

첫째로 zip 파일은 유니코드로 파일명을 저장하지 않기 때문이고,

둘째는 리눅스는 윈도우와 달리 UTF-8 인 유니코드 체제를 쓰기 때문에 코드가 달라서 글자가 깨지는 것입니다.

이런 문제를 막으려면 파일명을 유니코드로 저장하는 rar 이나 7zip 을 이용해서 파일을 압축하면 됩니다. 하지만 다른사람들이 다 그렇게 해주지는 않죠? ^^; 그래서 이런 파일을 한글이 안깨지게 푸는 방법을 적어보도록 하겠습니다.



예전에 unzip을 이용하는 방법을 적었던 적이 있었는데요. 이번 우분투 9.10을 설치한 이후 unzip을 봤더니 -O 옵션이 없더군요. --;

그러던 중 우분투 포럼에 이를 해결하는 내용이 올라와 있기에 올려 봅니다.

http://ubuntu.or.kr/viewtopic.php?f=18&t=7861

Perl 스크립트인데요. 저 짧은 스크립트가 zip 압축을 풀어내는 프로그램이 되다니 펄의 놀라운 능력을 보는듯 합니다. 정확히는 CPAN 의 위력이라고 해야 할까요?

위 링크에 사용법이 있지만 간단히 정리하자면....

우선 콘솔에서 'sudo apt-get install libarchive-zip-perl' 을 입력해 해당패키지를 설치하거나, synaptic 을 이용해서 libarchive-zip-perl 패키지를 찾아 설치합니다.

그리고, perl 스크립트를 긁어다가 파일로 만듭니다. 링크된 글에 있듯이 kozip 이던 kzip 이던 맘에드는 이름으로 저장하면 됩니다.

#!/usr/bin/perl
use strict;
use Encode;
use Archive::Zip;
my $zip = Archive::Zip->new();
$zip->read($ARGV[0]) == 0 or
   die "$0: couldn't read $ARGV[0]\n";
foreach my $mref ($zip->members) {
    my $n = decode("cp949",$mref->fileName);
    print "Extracting $n\n";
    $zip->extractMember($mref,$n) == 0 or
   die "$0: couldn't extract $n\n";
}


이제 저장한 파일에 실행권한을 줘야 합니다. 만일 저장 파일이 kozip 이었다면 'chmod +x kozip' 하면 됩니다.

그런 다음 위 글에서 처럼 /usr/local/bin 이나 아니면 자신의 홈디렉토리에 'bin' 디렉토리를 만들어 복사해 넣고 사용하면 됩니다.

압축을 풀때는 kozip xxx.zip 이런식으로 하면 됩니다.
그러면 한글 파일명이 깨지지 않고 잘 풀립니다. 위 링크에는 일본어 파일을 푸는 스크립트도 있으니 필요하신 분은 참고 하시기 바랍니다.



정말 훌륭하고 요긴한 팁이 아닐 수 없습니다.

예전에는 wine 으로 윈도우용 압축프로그램을 이용해 풀기도 하고 했었는데요. 이젠 그럴 필요 없겠네요. ^^;

알려주신 분께 감사 드립니다.



+ Recent posts