파일처리_15 gzip 명령어로 압축률 높이기

 
  • 출처 : 유닉스 리눅스 쉘스크립트 예제사전_한빛미디어

명령어: 압축률, gzip 형식
키워드: 암호, 암호화, zip 파일
사용처: 다른 프로그램과 연계하기 위해 암축 형식은 gz 그대로이지만 압축률을 높이고 싶을 때


실행예제

$ ./gzip.sh
$ ls
archive.tar.gz gzip.sh log

스크립트

#!/bin/sh
 
tar cf archive.tar log
 
# -9 옵션으로 압축률을 최대로 함
gzip -9 archive.tar  # -------- 1

   

해설

이 스크립트는 디렉터리 log를 tar 아카이브한 다음에 gzip으로 압축합니다. 1에서 gzip 압축할 때 -9 옵션을 주어 압축률을 옵립니다.

gzip 형식 압축 파일은 유닉스 환경에서는 예전부터 많이 써왔고 셸 스크립트에서도 많이 이용하는 파일 형식입니다. 따라서 오래 전부터 사용한 업무용 배치 등에서는 압축 형식의 gz라고 정해놓고 동작하는 스크립트도 아직 많을 것입니다.

현재는 gzip 형식보다 높은 압축률을 보이는 bzip2나 xz 파일 형식 등도 널리 사용됩니다. 가능하면 이런 고압축률을 포맷으로 이전하는 것이 좋겠지만 오래된 시스템과 연계된 다른 프로그램도 수정해야 해서 포맷을 바꾸는 일이 간단하지 않습니다.

이럴 때 어떻게든 디스크 영역을 절약하고 싶다면 예제에서 나온 -9 옵션을 사용합니다. gzip 명령어는 “-숫자” 옵션을 써서 처리 시간과 압축률을 조정할 수 있습니다. 이 값은 1에서 9까지 단계로 지정할 수 있어서 숫자가 클수록 압축률이 높습니다. 기본값은 6입니다.

예제에서는 더 속도가 낮지만 압축률이 높은 -9 옵션을 지정했습니다. 이걸로 디스크 용량을 절약할 수 있습니다.

다음 실행 예제는 20MB 정도 되는 20140228.pcap(tcpdump의 패킷 덤프 파일) 파일을 gzip -1과 gzip -9로 압축한 파일 크기를 비교한 것입니다. -9 옵션으로 압축한 쪽의 압축률이 높은 걸 알 수 있습니다.

  • gzip 압축률에 따른 파일 크기 비교
    $ ls -lh
    total 32M
    -rw-r--r-- 1 ozuma ozuma 6.2M Mar 6 09:37 20140228.gzip1.pcap.gz
    -rw-r--r-- 1 ozuma ozuma 5.9M Mar 6 09:37 20140228.gzip9.pcap.gz
    -rw-r--r-- 1 ozuma ozuma  20M Mar 6 09:36 20140228.pcap
    

    -9 옵션을 지정해도 파일에 따라서는 소숫점 몇 % 정도밖에 압축률이 달라지지 않을 수도 있습니다. 큰 기대는 할 수 없지만, 파일 수가 많을 때는 이런 차이도 도움이 되므로 -9 옵션을 사용해 보기 바랍니다.

   

주의사항

  • gz 형식 파일을 고집하지 않는다면 더 압축률이 높은 명령어를 사용하는 것이 좋습니다. 리눅스라면 bzip2 명령어, Free BSD라면 xz 명령어가 많이 사용됩니다. 둘다 옵션은 gzip 명령어와 호환성이 있어 별 부담 없이 사용할 수 있습니다.

  • tar 명령어로 아카이브해서 압축하려면 다음처럼 중간 파일을 만들지 않아도 압축할 수 있습니다. 이러면 .tar 파일을 디스크에 저장하지 않아도 되므로 작업 시 디스크 사용량을 절약할 수 있습니다.

    tar cf - log | gzip -9 -c > archive.tar.gz
    

    gzip 명령어는 환경 변수 GZIP을 설정하면 그 값이 기본값 옵션으로 사용됩니다. 따라서 스크립트 앞부분에 다음과 같은 줄을 넣어두면 늘 -9 옵션이 적용됩니다.

    GZIP='-9'; export GZIP