2012-01-14 121 views
4

我正在创建一个zip存档,其中包含两个不同路径的相同文件。 zip档案格式是否支持类似Unix硬链接概念的东西?我的意思是只能存储文件一次(节省空间),但要将该数据blob索引到zip归档文件中的两个不同路径。在zip压缩文件中可以使用硬链接吗?

如果文件格式确实支持这个,我该如何使用Ubuntu中的免费工具创建这样的存档?

回答

7

不,Zip file format不支持这一点。这是因为本地文件头包含有关该文件的信息,包括其名称,紧接着是该文件的压缩数据。两个不同的本地文件头不可能指向相同的压缩数据。

+0

谢谢 - 我很怀疑,但希望可能有一个我没有想到的技巧。 – Grampoulos 2012-01-14 02:32:29

+0

根据https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT,在UNIX附加字段中,可变长度数据字段可以包含有关“符号或硬链接”的信息。这表明一些实现可以支持这一点。你不觉得吗? – 2015-05-21 07:56:08

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 2017-07-23 05:09:07

+0

@ user321627这个数字就是压缩文件的大小,所以归档的规模越小越好 – Paker 2017-07-23 08:48:29

3

tar档案支持硬链接

+1

这个答案waaay太简洁了。用链接和一些背景信息备份你的断言。 – nalply 2012-10-11 18:23:18

相关问题