Ubuntu zip存档中是否可以使用硬链接?

Ubuntu zip存档中是否可以使用硬链接?,ubuntu,compression,zip,archive,hardlink,Ubuntu,Compression,Zip,Archive,Hardlink,我正在创建一个zip存档,其中包含两个位于不同路径的相同文件。zip存档格式是否支持类似于Unix硬链接概念的内容?我指的是只存储一次文件(节省空间)的能力,但将该数据块索引到zip归档中的两个不同路径 如果文件格式确实支持这一点,我如何使用Ubuntu中的免费工具创建这样的归档文件?不,不支持。这是因为本地文件头包含有关文件的信息,包括文件名,后跟文件的压缩数据。两个不同的本地文件头不可能指向相同的压缩数据。正如@Greg所说,ZIP不支持硬链接 但若我的理解是正确的,那个么您的目的是减少压缩

我正在创建一个zip存档,其中包含两个位于不同路径的相同文件。zip存档格式是否支持类似于Unix硬链接概念的内容?我指的是只存储一次文件(节省空间)的能力,但将该数据块索引到zip归档中的两个不同路径


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

不,不支持。这是因为本地文件头包含有关文件的信息,包括文件名,后跟文件的压缩数据。两个不同的本地文件头不可能指向相同的压缩数据。

正如@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 
$export BZIP=--fast
$tar cjf test1.tbz test.bin 
$tar cjf test2.tbz test.bin test2.bin 

 8694997  test1.tbz
17389167  test2.tbz
$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 a -m5 test1.rar test.bin
$rar a -m5 test2.rar test.bin test2.bin 

 8649970  test1.rar
17299916  test2.rar
BZIP2

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

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

 8694997  test1.tbz
17389167  test2.tbz
$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 a -m5 test1.rar test.bin
$rar a -m5 test2.rar test.bin test2.bin 

 8649970  test1.rar
17299916  test2.rar
7z

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

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

 8694997  test1.tbz
17389167  test2.tbz
$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 a -m5 test1.rar test.bin
$rar a -m5 test2.rar test.bin test2.bin 

 8649970  test1.rar
17299916  test2.rar
RAR

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

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

 8694997  test1.tbz
17389167  test2.tbz
$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 a -m5 test1.rar test.bin
$rar a -m5 test2.rar test.bin test2.bin 

 8649970  test1.rar
17299916  test2.rar
结论: 看来只有7z能做好这项工作。 考虑在你的应用程序中使用它。< /P>
当然,您需要在您的环境中对您的文件进行更多的测试,以查看它是否真的符合您的需要。此外,您还可以使用选项查看在哪种压缩级别上获得最佳压缩比/速度平衡。

tar归档文件支持硬链接

谢谢——我也这么怀疑,但希望有一个技巧我没有想到。根据,在UNIX额外字段中,可变长度数据字段可以包含有关“符号链接还是硬链接“。这表明一些实现可以支持这一点。你不觉得吗?这个答案太简单了。用链接和一些背景信息来备份你的断言。它是如何做得更好的?数字越大越好?@user321627数字是压缩文件的大小,因此归档文件的大小越小越好