.tar.gz로 최대 압축을 얻는 방법? [복제]

이 질문에는 이미 답변이 있습니다.

tar + gzip의 사용법을 이해하는 방법 tar은 일반적으로 파일 그룹을 단일 파일로 통합하는 gzip데 사용되며 해당 파일을 압축하는 데 사용됩니다.

나는 최근에 tar압축 할 수 있다는 것을 배웠다 .

압축이 핵심에서 작동하는 방식을 완전히 이해하지 못하기 때문에 사전 압축 된 .tar를 gzip으로 전송하면 gzip이 압축되지 않고 잠재적으로 허용되는 것과 그 성질의 것들을 방해 할 수 있다는 우려가 있습니다.

내 질문은 본질적으로 : 절대적으로 가장 작은 tar.gz를 만드는 데 사용해야하는 args / 압축 방법의 조합은 무엇이며 명령 줄 문은 어떻게 생겼습니까?



답변

또는 tar를 다음과 같이 사용자에게 최대 압축으로 지정할 수 있습니다.

export GZIP=-9
tar cvzf file.tar.gz /path/to/directory

또한 envvar를 깔끔하게 유지하려면 다음을 수행하십시오.

env GZIP=-9 tar cvzf file.tar.gz /path/to/directory

답변

당신 stated- “으로 할 수 타르 또한 압축 -“을 의미 tar하지 않습니다 항상 그 자체로 데이터를 압축.

z옵션 과 함께 사용하는 경우에만 그렇게합니다 . 그 자체로도 아니라 tard 데이터를 gzip을 통해 전달합니다.

그러나, 대신에 명시된 바와 같이 ,이 대답하면 파이프 수있는 두 개의 명령 : targzip명시 적 대한 압축 레벨을 지정할 수 있도록 gzip작은 크기의 출력을 달성하는 명령.

tar cvf-/ path / to / directory | gzip -9-> 파일 .tar.gz

다음은 9최대 가능 압축률을 지정한다.


답변

일반적으로 gzip이나 tar는 “가장 작은 tar.gz”를 만들 수 없습니다. gz 형식으로 압축 할 수있는 많은 압축 유틸리티가 있습니다. 나는 bash는 스크립트 “쓴 gz99 “시도 gzip, 7z그리고 advdef가장 작은 파일을 얻을 수 있습니다. 이것을 사용하여 가능한 가장 작은 파일을 작성하려면 다음을 수행하십시오.

tar c path/to/data | gz99 file.gz

advdefAdvanceCOMP 의 유틸리티는 일반적으로 가장 작은 파일을 제공하지만 버그도 있습니다 ( gz99유틸리티는의 출력을 수락하기 전에 파일이 손상되지 않았는지 검사합니다 advdef). advdef직접 사용하려면 원하는 느낌으로 file.tar.gz를 만드십시오. 그런 다음 다음을 실행하십시오.

advdef -z -4 file.tar.gz

이것은 gzip과 tar로 읽을 수있는 표준 gz 파일을 생성합니다. 이것은 gz 형식으로 할 수있는 최선의 방법입니다.

tar가 압축 할 수 있다는 사실을 최근에 알게되었고 왜 가장 작은 “.tar.gz”파일을 원하는지 말하지 않았기 때문에 xz와 같은 tar 파일에 더 효율적인 형식을 사용할 수 있다는 것을 알지 못할 수 있습니다. 일반적으로 다른 형식으로 전환하면 gzip 옵션을 사용하는 파일보다 압축 성능이 크게 향상 될 수 있습니다. xz의 가장 큰 단점은 gzip만큼 일반적이지 않으므로 파일을 보내는 사람들이 새 패키지를 설치해야 할 수도 있다는 것입니다. 또한 특히 압축 할 때 약간 느려지는 경향이 있습니다. 이것이 당신에게 중요하지 않고 정말로 작은 tar 파일을 원한다면 다음을 시도하십시오.

 tar cv path/to/data | xz -9 > file.tar.xz

Ubuntu 13.10과 같은 최신 버전의 tar는 압축 파일을 자동으로 감지합니다. 따라서 xz 압축을 사용하더라도 평소와 같이 압축을 풀 수 있습니다.

 tar xvf file.tar.xz

이러한 압축 유틸리티가 어떻게 비교되는지 빠르게 이해하려면 Linux 커널에서 패치 -3.1.1을 압축하는 효과를 고려하십시오.

utility         cpu    format  size(bytes)
gzip -9         0.02s  gz      105,628
advdef -2       0.07s  gz      102,619
7z -mx=9 -tgzip 0.42s  gz      102,297
advdef -3       0.55s  gz      102,290
advdef -4       0.75s  gz      101,956
xz -9           0.03s  xz       91,064
xz -3e          0.15s  xz       90,996

이 간단한 예제에서 우리는 가장 작은 gz를 얻으려면 advdef가 필요하다는 것을 알 수 있습니다 (7z -tgzip은 거의 좋고 버그가 적습니다). 또한 xz로 전환하면 압축 시간이 오래 걸리지 않고 기존 gz 형식을 최대한 활용하려고 시도하는 것보다 훨씬 많은 공간을 확보 할 수 있습니다.


답변

tar c /path/to/data | gzip --best > file.tar.gz

gzip옵션 --best(과 동일 -9)은 가장 높은 압축 수준을 요청합니다.