2012-01-14 4 views
4

서로 다른 경로에있는 두 개의 동일한 파일을 포함하는 zip 아카이브를 만들고 있습니다. zip 아카이브 형식이 유닉스 하드 링크 개념과 비슷한 것을 지원합니까? 이 말은 파일을 한 번만 저장하면 (공간 절약) zip 아카이브 내의 두 개의 다른 경로에 해당 데이터 blob을 색인하는 것입니다.zip 아카이브 내에서 하드 링크가 가능합니까?

파일 형식이 이것을 지원한다면, 우분투의 무료 도구를 사용하여 그러한 아카이브를 만들려면 어떻게해야합니까?

답변

7

아니요, Zip file format은이 기능을 지원하지 않습니다. 이는 로컬 파일 헤더에 파일에 대한 정보 (이름 포함)가 포함되어 있고 파일 바로 뒤에 압축 된 데이터가 포함되어 있기 때문입니다. 두 개의 서로 다른 로컬 파일 헤더가 동일한 압축 된 데이터를 가리키는 것은 불가능합니다.

+0

감사합니다. 나는 생각하지 못했지만 트릭이있을 것으로 기대하고있었습니다. – Grampoulos

+0

https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT에 따르면, UNIX 추가 필드에서 가변 길이 데이터 필드는 "기호 또는 하드 링크"에 대한 정보를 포함 할 수 있습니다. 이것은 일부 구현이이를 지원할 수 있음을 암시합니다. 생각하지 않니? –

7

@Greg가 말했듯이, ZIP은 하드 링크를 지원하지 않습니다.

하지만 올바르게 이해하면 압축 된 아카이브의 크기를 줄이는 것이 목적입니다. 그럼 대체 솔루션을 생각해 봅시다.

서로 다른 보관 라이브러리의 압축 비율을 확인하는 간단한 테스트를 실행할 수 있습니다. 두 개의 동일한 바이너리 파일을 만들고 ZIP, BZ2, RAR 및 7z를 사용하여 압축했습니다.

8641969 test.bin 
    8641969 test2.bin 

처음으로 하나의 파일 만 압축되었습니다. 두 번째 파일을 압축 하였다 :

ZIP :

$zip -9 test1.zip test.bin 
$zip -9 test2.zip test.bin test2.bin 

8636837 test1.zip 
17273654 test2.zip 

BZIP2 :

$export BZIP=--fast 
$tar cjf test1.tbz test.bin 
$tar cjf test2.tbz test.bin test2.bin 

8694997 test1.tbz 
17389167 test2.tbz 

7Z :

$7z a -mx=9 test1.7z test.bin 
$7z a -mx=9 test2.7z test.bin test2.bin 

8705285 test1.7z 
8707054 test2.7z 

RAR :

$rar a -m5 test1.rar test.bin 
$rar a -m5 test2.rar test.bin test2.bin 

8649970 test1.rar 
17299916 test2.rar 

결론는 : 단지 7Z이 작업 좋은 않는 것 같다. 응용 프로그램에서 사용하는 것이 좋습니다.

물론 파일이 필요한 환경에서 더 많은 테스트를 수행하여 필요한 부분을 확인해야합니다. 또한 최상의 압축 비율/속도 균형을 얻는 압축 수준을 확인할 수있는 옵션도 제공됩니다.

+0

더 나은 일을하는 방법은 무엇입니까? 숫자가 클수록 더 낫습니까? – user321627

+0

@ user321627 숫자가 압축 파일의 크기이므로 더 작은 크기의 아카이브가 더 좋습니다. – Paker

3

타르 아카이브는 하드 링크를 지원합니다.

+1

이 답변은 너무 간결합니다. 링크와 배경 정보로 주장을 뒷받침하십시오. – nalply