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


63

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

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

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

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

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


2
이미 압축 된 파일을 압축하면 파일 크기가 줄어들거나 보관 파일이 커질 수 있습니다. 데이터 유형과 사용중인 압축에 따라 다릅니다.
Keltari

@Keltari가 말한 것. 압축률과 비율은 압축 대상에 따라 크게 달라 지므로 압축 알고리즘과 방법이 다른 이유도 있습니다.
music2myear

답변:


111

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

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

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

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

43

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

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

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

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

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


나는 재귀 적이 지 않은 문제가 있었고 명령이 분리되어 있기 때문에 빈 아카이브가 될 것이라고 불평했다. 이미 tar 기본값이기 때문에 재귀를 올바르게 강제하는 방법을 찾기가 어렵다. 내 나쁜, 나는 이렇게 시작을 잘못 지정했다tar -cvf /path
Brian Thomas

17

일반적으로 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 형식을 최대한 활용하려고 시도하는 것보다 훨씬 많은 공간을 확보 할 수 있습니다.


OP는 .tar.gz 파일을 최대한 압축하는 방법을 요청했지만 .tar.xz 파일을 만드는 것이 좋습니다. 요청한 것과 다른 질문에 대답하고 있습니다.
ChrisInEdmonton

아, 무슨 일인지 알 겠어 advdef는 내 시스템 (v1.15)에서 충돌하므로 'advdef -z -4 file.tar.gz'는 작동하지 않지만 이론적으로는 가능합니다. 파일이 'gzip -9'보다 더 줄어든다는 증거를 찾을 수는 없지만 -1 표를 제거하기에 충분합니다. 설명해 주셔서 감사합니다!
ChrisInEdmonton

흠, 나는 v1.17을 사용하고 있습니다. 어쨌든 저의 페데 틱 수학자는 내 대답이 기술적으로 정확하지 않다는 것을 지적하고 싶습니다. 결국 가능한 모든 gz 파일을 가장 짧은 것부터 가장 긴 것까지 열거하고 올바른 파일로 압축을 해제하는 첫 번째 파일을 선택하면 몇 바이트를 더 줄일 수 있습니다. 그러나 실제로는 너무 느릴 것입니다.
gmatht

"버기"와 "아카이브"를 함께 사용해야한다고 생각하지 않습니다. 손상된 아카이브의 용도는 무엇입니까? 당신은 필요 많은 압축 유틸리티를 "비교"더 큰 파일을 입력의 종류가 너무 파일 - 두 번째 차이 백분 측정되어 있지 그 신뢰성, 내가 생각하는 xz -9보통 5 배처럼 뭔가를 필요 gz -9로 단지 1.5 배, 시간이 없다 당신의 테이블은 제안합니다.
Xen2050

어떻게 xz 프로세스를 사용하여 분할 아카이브 (압축하면서)를 만들 수
있습니까?

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

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


4
또는 --best플래그를 사용하십시오 . -9는 판독기와 혼동됩니다.
om-nom-nom 12
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.