2012-01-14 107 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