Ant-Tar/unTar 작업

파일들을 묶을때(archiving, packaging) 많이 쓰는 포맷중에 하나가 tar 파일 포맷이다.
이러한 tar 파일 포맷은 내부적으로 하나의 포맷만 있는 게 아니라 여러개의 포맷으로 분리된다.
(다양한  tar 파일 포맷에 대한 정리는 여기를 보시라.)

그 중에서도 가장 많이 쓰이는 것이 ustar 포맷과  gnu tar 포맷이다.
Unix머신에서 일반적으로 많이 보게 되는 포맷은 대부분 ustar이다. 그런데, 이 ustar포맷은 위 링크된 문서에서도 알 수 있듯이 묶는 작업을 할 때 파일 경로명 길이나, 용량에 제약(길이 256byte, 용량 8G 넘는 것 불가)이 있다.

따라서 긴 경로명을 가진 파일을 tar로 묶을려면, gnu tar형식으로 묶어야 한다.

Ant의 tar 타스크는 longfile 속성을 통해  gnu tar형식을 지원하고 있다. 있는 것 같다.

gnu tar포맷으로 묶었으면, gnu tar포맷을 지원하는 tar유틸로 묶음을 풀어야 한다. ustar만 지원하는 tar유틸로 묶음을 풀 경우,  긴 경로명 파일은 풀지 못하며, 대신 실패한 파일의 경로명이 적힌 @longLink라는 파일이 생성된다.

Ant의 tar 타스크는 긴 경로명 파일에 대한 tar, untar작업을 잘 지원하며, Windows에서도 별도 유틸 설치 없이 tar작업을 할 수 있다는 장점이 있다. (긴 경로 파일이 아닌 경우 ustar만 지원하는 유틸과 호환도 문제없다.)

하지만 치명적인 결함이 하나 있으니, 그건 바로 한글 경로명을 가진 파일에 대한 작업 오류이다. Ant의 tar 타스크는 파일 이름을 포함하여 경로명 중에 한글이 들어가 있는 파일을 정상적으로 묶지 못한다. (-tf 옵션을 걸어서 tar파일을 읽어보면 파일명이 깨져 보인다.)  묶을 때 이미 실패했으니 묶음을 풀 때도 잘 될리 만무하다.

한글파일도 tar, untar 잘 할 수 있도록  Ant library파일을 수정하고 있기는 한데,  만들어 놓으니 Ant구동  JDK버전을 가려서 골치가 좀 아프다.

댓글 남기기