한글이 깨지는 zip 화일 노틸러스 Context Menu에서 압축 풀기

우선 처음 글을 올리기에 인사 먼저 드립니다.

지금까지는 윈도우 쪽 계열 프로그램 만 해오다가… 우분투를 사용한지는 이제 한 달 정도 되어가는 것 같고…

이 게시글은 제목 그대로 한글이 깨지는 zip 화일을 노틸러스의 오른쪽 버튼 메뉴를 통해 압축을 풀기 위한 방법입니다.

이제부터 왜 이런 뻘 짓을 하게 되었는지 이야기 드리겠습니다

[color=#8000BF:1r2rfhyi] 아는 사람으로 부터 zip 으로 압축된 화일을 하나 받았습니다. [/color:1r2rfhyi]
[color=#8000BF:1r2rfhyi] 아무 생각 없이 노틸러스에서 압축을 푸니… 한글로 된 화일명이 깨지더군요… [/color:1r2rfhyi]

[color=#8000BF:1r2rfhyi] 구글링 시작…[/color:1r2rfhyi]
[color=#8000BF:1r2rfhyi] 크게 두 가지의 해결책이 나옴…[/color:1r2rfhyi]

[color=#8000BF:1r2rfhyi] 첫째는 문제가 발생하지 않는 unzip 예전 버전으로 되돌려놓고 사용하기 [/color:1r2rfhyi]
[color=#8000BF:1r2rfhyi] 두번째는 어떤 분이 Perl로 작성해 놓으신 kozip을 통해 터미널을 띄워서 압축풀기. [/color:1r2rfhyi]

[color=#8000BF:1r2rfhyi] 예전 버전 쓰는건 맘에 안내키고… kozip을 설치했습니다. [/color:1r2rfhyi]

kozip 설치 관련 글타레 : [url:1r2rfhyi]http://ubuntu.or.kr/viewtopic.php?p=40719#p40719[/url:1r2rfhyi]
kozip 설치 관련 글타레 2 : [url:1r2rfhyi]http://ubuntu.or.kr/viewtopic.php?f=18&t=7861[/url:1r2rfhyi]

[color=#8000BF:1r2rfhyi] 터미널 창에서 압축 풀기가 귀찮았던 저는 [/color:1r2rfhyi]
[color=#8000BF:1r2rfhyi] 어떻게 하던 노틸러스에서 kozip을 실행시켜보기 위해… 다시 구글링 [/color:1r2rfhyi]

[color=#8000BF:1r2rfhyi] 역시 뭔가가 나옴… 아래는 노틸러스의 사용자 컨텍스트 메뉴를 설정할 수 있는 플러그 인입니다. [/color:1r2rfhyi]

참고 사이트
[url:1r2rfhyi]http://helpdeskgeek.com/linux-tips/add-shortcuts-to-right-click-context-menu-in-ubuntu/[/url:1r2rfhyi]

[color=#8000BF:1r2rfhyi] 다음 명령으로 설치… [b:1r2rfhyi]sudo apt-get install nautilus-actions[/b:1r2rfhyi] [/color:1r2rfhyi]

[color=#8000BF:1r2rfhyi] 참고 사이트에 나온 그림과 버전이 틀려서 그런지… 많이 헷갈렸음. [/color:1r2rfhyi]
[color=#8000BF:1r2rfhyi] 설치되면 메뉴의 [시스템]>[기본설정]>[노틸러스 동작설정] 을 통해 실행할 수 있음 [/color:1r2rfhyi]

[color=#8000BF:1r2rfhyi] 나머지는 전부 디폴트를 했고 제가 설정한 부분은 아래 이미지 화일에 있습니다. [/color:1r2rfhyi]
[color=#FF0000:1r2rfhyi] 설정한 뒤 로그아웃 한 뒤 다시 들어와야 설정된 것이 동작됩니다. [/color:1r2rfhyi]
[color=#FF0000:1r2rfhyi] 노틸러스를 종료한 뒤 다시 실행시키면 된다는데 저는 안되더군요. -_- [/color:1r2rfhyi]

[color=#8000BF:1r2rfhyi] 여기까지 하고 이젠 되겠지… 하고 기대에 부푼 마음으로 해당 zip화일을 클릭한 후 오른쪽 버튼을 눌러서 [/color:1r2rfhyi]
[color=#8000BF:1r2rfhyi] kozip을 실행했더니… 압축풀린 화일들이 어디로 갔는지 보이지가 않더군요… [/color:1r2rfhyi]
[color=#8000BF:1r2rfhyi] 찾아보니 제 계정 밑으로 압축 풀려버리는 사태가 발생… [/color:1r2rfhyi]

[color=#8000BF:1r2rfhyi] perl이란 언어를 생전 처음 접하는 저로써는… -_- [/color:1r2rfhyi]
[color=#8000BF:1r2rfhyi] 조금 버겁긴 했지만… 이리 저리 찾아보고 삽질한 덕에야… [/color:1r2rfhyi]

[color=#8000BF:1r2rfhyi] 해당 zip 화일을 클릭해서 오른쪽 버튼을 누른 뒤 [/color:1r2rfhyi]
[color=#8000BF:1r2rfhyi] "한글 압축 깨짐 화일 풀기" 라는 사용자 컨텍스트 메뉴를 실행하면 [/color:1r2rfhyi]
[color=#8000BF:1r2rfhyi] 해당 zip 화일 명으로 디렉토리를 만들어 주고… 해당 디렉토리로 압축을 푸는 동작을 볼 수 있었습니다. [/color:1r2rfhyi]

kozip을 아래 코드로 대치해주세요…

오늘 저녁에 perl을 공부하면서 이리 저리 참조해서 만든 코드라… -_-;;
실력자 분들이 보시기에 답답한 코드일 수도 있습니다.
무언가 이상하면 지적 부탁 드립니다.

그럼 이만…

고임

[code:1r2rfhyi]
#!/usr/bin/perl

use strict;
use Encode;
use Archive::Zip;
use Cwd ‘abs_path’;
use File::Basename;

my $full_path = abs_path($ARGV[0]); # 해당 화일의 풀패스를 얻어옴..

나중에 해당 zip 화일 명으로 폴더를 만들어 넣기 위해 확장자를 뺀 화일 이름을 구함

my ($fileNameOnly, $directory, $ext) = fileparse($full_path, ‘.[^.]*’);

chdir $directory ; # 경로가 계정 위치가 되는 것을 막기 위해 해당 zip화일이 있는 곳으로 경로 변경

my $zip = Archive::Zip->new();

$zip->read($ARGV[0]) == 0 or
die "$0: couldn’t read $ARGV[0]\n";

만일 zip 화일 명이 한글일 경우 이런 식으로 안하면 디렉토리 글자가 깨짐 이유는 모름 -_-;

my $ExtractFileName;
my $FileNameUTF8 = decode("utf-8",$fileNameOnly);

foreach my $mref ($zip->members)
{
my $n = decode("cp949",$mref->fileName);
print "Extracting <$n>\n";

$ExtractFileName = $FileNameUTF8 &#46; &quot;/&quot; &#46; $n; # 디렉토리 밑에다가 압축 화일을 넣기 위해 이름 설정

$zip-&gt;extractMember($mref,$ExtractFileName) == 0 or

die "$0: couldn’t extract $n\n";
}
[/code:1r2rfhyi]

우와!!! 이거 대박이예요!!! 매번 터미널에서 압축 풀기를 해야했는데… 노틸러스 액션 저 프로그램 잘 쓰면 엄청 강력하겠네요!!!

좋은 팁 고맙습니다!!!

근데 이 글 좀 정리해서 제 블로그에 적어도 될까요??? (물론 원작자와 본 글타래 소개 및 링크 포함)

  • [b:2nap2xyl]문제점 발견!!![/b:2nap2xyl]

압축 파일 내에 여러 개의 폴더가 있을 때 하나만 풀고 멈춰버리는 것 같네요… ㅠㅠ

  • [b:2nap2xyl]다시 수정[/b:2nap2xyl]

압축 파일 자체 문제였네요;;; 다른 파일로 해보니 아~~~주 잘 됩니다!!!

[quote="idkoim":10ictakh]
[color=#FF0000:10ictakh] 설정한 뒤 로그아웃 한 뒤 다시 들어와야 설정된 것이 동작됩니다. [/color:10ictakh]
[color=#FF0000:10ictakh] 노틸러스를 종료한 뒤 다시 실행시키면 된다는데 저는 안되더군요. -_- [/color:10ictakh]
[/quote:10ictakh]

노틸러스를 종료하신다는 것이 kill nautilus 하신건지요?

그냥 창을 닫아서는 안 될 겁니다.(어떻게 하셨나요?)

노틸러스 종료시키는건 로그아웃 로그인 하실 필요 없이 터미널에서

[code:30zgmw3m]nautilus -q [/code:30zgmw3m]
적용 시키시면 됩니다

저도 마우스 오른쪽 클릭해서 한글 화일 푸는걸 원했는데 이제 속이 다 시원하군요
감사합니다. 나중에 집에가서 바로 테스트 해볼께요 :D

[color=#400080:3hvcmcmb][b:3hvcmcmb]coreanlibero >[/b:3hvcmcmb][/color:3hvcmcmb]
저도 다른 분의 팁을 보고 만든 팁이니…
널리 퍼져서 더 좋은 팁으로 돌아오면 환영입니다.

[color=#400080:3hvcmcmb][b:3hvcmcmb]ctrl144 >[/b:3hvcmcmb][/color:3hvcmcmb]
처음엔 노틸러스 종료를 nike984 님 말씀대로

[code:3hvcmcmb]nautilus -q [/code:3hvcmcmb]

이렇게 했는데… 이상하게 적용이 안되는 것 같아…
그냥 로그 오프… 다시 로그온 했습니다. -_-;

고임

사랑합니다.

[quote="imakez":2m2jysi8]사랑합니다.[/quote:2m2jysi8]
수줍어서 미처 하지 못했던 말을…

[quote="idkoim":2m2jysi8][color=#400080:2m2jysi8][b:2m2jysi8]coreanlibero >[/b:2m2jysi8][/color:2m2jysi8]
저도 다른 분의 팁을 보고 만든 팁이니…
널리 퍼져서 더 좋은 팁으로 돌아오면 환영입니다. [/quote:2m2jysi8]
ㅎㅎ 곧 정리해서 블로그에 올리고 위키에도 정리해야겠네요… 다음 번 코분투 발표 때 반드시 포함되어야할 팁 같애요!!!

블로그에는 대강 재정리했는데 당장 눈 앞에 중요한 시험이 있는지라 위키에다가 정리하는 건 다다음주에나 해야겠네요…

[quote="coreanlibero":2h4gz5vm]블로그에는 대강 재정리했는데 당장 눈 앞에 중요한 시험이 있는지라 위키에다가 정리하는 건 다다음주에나 해야겠네요…[/quote:2h4gz5vm]

지금 들려서 봤는데… 굉장히 깔끔하게 작성하셔서 깜짝 놀랐습니다. 대강 정리가. 이 정도시라니… ^^

아… 아이콘은 감사하게… ^^ 쓰겠습니다. ㅎㅎ

시간이 나면 상태 진행 바 같은 거 하나 만들어서 "압축 풀기" 마냥 풀린 정도를 표시해주고 싶었는데…
이래 저래… 시간이 없어서… 차후로 미루고 있습니다.

다른 고수분이 나서시면… 한 10분이면 끝날 것 같은데…

저 같은 초보는… 뭐 언젠가는… -_-;;

고임

[quote="coreanlibero":2hsh1i28]

  • [b:2hsh1i28]문제점 발견!!![/b:2hsh1i28]

압축 파일 내에 여러 개의 폴더가 있을 때 하나만 풀고 멈춰버리는 것 같네요… ㅠㅠ
[/quote:2hsh1i28]

이유는 모르겠는데…제 컴에서도 파일 하나만 풀고 끝나버리는 듯 합니다…
혹시나 해서 제가 가지고 있던 zip파일들 중에서 여러 개 해 보았는데…

한글이 포함된 파일이름을 가진 파일 하나만 풀고 끝나버리는 듯 합니다…
재 부팅해도 해결이 안되네요…ㅠㅠ

[quote="rednwhite":znwp9pas][quote="coreanlibero":znwp9pas]

  • [b:znwp9pas]문제점 발견!!![/b:znwp9pas]

압축 파일 내에 여러 개의 폴더가 있을 때 하나만 풀고 멈춰버리는 것 같네요… ㅠㅠ
[/quote:znwp9pas]

이유는 모르겠는데…제 컴에서도 파일 하나만 풀고 끝나버리는 듯 합니다…
혹시나 해서 제가 가지고 있던 zip파일들 중에서 여러 개 해 보았는데…

한글이 포함된 파일이름을 가진 파일 하나만 풀고 끝나버리는 듯 합니다…
재 부팅해도 해결이 안되네요…ㅠㅠ[/quote:znwp9pas]

자문자답합니다…
결론적으로는 잘 됩니다…

안되는 경우도 있습니다…

제 경우에는 zip파일이름이 문제였습니다…
zip파일이름에 따라서 어떤 파일들은 압축파일내에서 한개의 파일만 풀고 끝내더군요…

그럼 그 '어떤 파일’이라는 것은…

터미널에서 tab키로 눌러서 파일이름을 완성시킬 때 파일이름이 제대로 완성이 안되는 파일들이더군요…
(뭔가 전문적인 용어가 있을텐데…몰라서 이렇게 밖에 설명이 안되네요…)

예를 들어 W&Whale-4집.zip 이나 w&whale_3집.zip 같은 파일들은 하나의 폴더안에 있어도 tab키로 파일이름이 제대로 완성안되는데…
이런 파일들은 제대로 압축을 못 풀더군요…

그 외의 파일들은 잘 됩니다…

이런 방법이 있었군요.

정말 감사합니다!
아직은 우분투가 압축파일 푸는 것에 있어서는 뒤떨어져 있나보네요.
조만간 멋진 프로그램이 나왔으면 좋겠네요.

우분투가 뒷떨어지는 게 아니라 zip파일이 뒷떨어지는 거 겠죠.

유니코드를 사용하지 않는 문제도 그렇고요.

덧붙여 말하면 개발자가 unzip에서 -o옵션을 추가해주지 않아서 발생한 문제이니
완전히 틀린 말씀은 아닌거 같지만 확실히 아셨으면 합니다.
(이전 버전에서는 추가됬었는데 어느 순간 빼져버렸습니다.)

[quote="debpolaris":1gunp4u8]우분투가 뒷떨어지는 게 아니라 zip파일이 뒷떨어지는 거 겠죠.

유니코드를 사용하지 않는 문제도 그렇고요.

덧붙여 말하면 개발자가 unzip에서 -o옵션을 추가해주지 않아서 발생한 문제이니
완전히 틀린 말씀은 아닌거 같지만 확실히 아셨으면 합니다.
(이전 버전에서는 추가됬었는데 어느 순간 빼져버렸습니다.)[/quote:1gunp4u8]

뭐… 저도 이런 의미인 건 알고 있었지만 말이에요. 전 분명 "푸는 것"에 대해서만 얘기했습니다.

다른 나라의 인코딩(big5나 shift-jis같은…)을 완벽하게 지원하는 프로그램이 없다는 것을 말씀드리고 싶었습니다.

혹시 있으면 추천받을 수 있을까요. ㅎㅎ

윈도우 같을 경우 applocale을 이용하여 간단하게 프리셋을 맞출 수 있었는데 말이죠.

패치로 한국 지원 해서 나왔으면 좋겠네요 ㅎㅎ;;

너무 좋은 정보 감사합니다. 그런데 nautilus-actions configuration tool 이 바뀌어서 어떻게 설정하는지 잘 모르겠네요.

바뀐 tool에 맞는 설정방법을 알려주시면 감사하겠습니다.

모르는게 많아서…^^

nautilus-filename-repairer를 설치해보세요…
깨진파일명의 인코딩을 선택하여 이름을 바꿔줍니다.
하위디렉토리 전체의 깨진 파일명 복구가 가능합니다.

콘솔에서 깨진파일명을 복구하는 명령으로는 convmv가 있습니다.

zip파일을 풀때,
저는 kunzip이라고 스크립트를 만들어서 사용합니다.

[code:14e9ljc6]
#!/bin/sh
if [ /usr/bin/unzip -l -O utf8 $* &amp;&gt;/dev/null ]; then
/usr/bin/unzip -O utf8 $*
else
/usr/bin/unzip -O euckr $*
fi
[/code:14e9ljc6]
방식은 unzip으로 실제 압축풀기전 파일명 리스트를 utf8로 풀어보는것으로,
인코딩을 테스트해서, 실제 압축 명령을 내리는 것입니다.

감사합니다. 너무 잘되네요.

일주일이 넘게 java, jzip, 노틸러스 툴 등 삽질을 계속해도 안되었는데 너무 쉽게 해결되었네요.

압축이 풀린 디렉토리에 메뉴에서 파일이름 고치기…를 하니 순식간에 해결되네요.

너무 감사합니다.

수십번의 삽질 끝에… 여러 방법을 찾았습니다. 이 글타래가 도움이 많이 되어 여기에 댓글로 남깁니다.
첫번째로, 가장 쉬운 방법은 nautilus-filename-repairer 만 설치하여 디렉토리 우클릭 후 깨진 글씨를 복구하는 방법. 이게 제일 간편하고 쉬웠습니다.
참고로, convmv를 설치하여 전 시스템의 깨진글씨 파일을 모두 찾아 바꾸는 것도 가능하니 참고하시구요…
두번째로, nautilus-actions-config-tool 를 설치(본문처럼)한 뒤, kozip이나 jzip이 아닌 그냥 unzip을 쓰는 것입니다.
본문을 참조하시되, Command탭에서 패스는 unzip 파라미터를 -Ocp949 -d%w %f로 바꾸면 됩니다. 그럼 해당 파일명으로 하위 디렉토리를 만들고
거기에 잘 풀어냅니다…

저는 우분투 12.04.4 64bit 환경에서 성공했습니다.

아참… nautilus -q는 shutdown 어쩌구가 뜰 때까지 여러번 실행시켜야 됩니다.