我正在創建一個zip存檔,其中包含兩個不同路徑的相同文件。 zip檔案格式是否支持類似Unix硬鏈接概念的東西?我的意思是隻能存儲文件一次(節省空間),但要將該數據blob索引到zip歸檔文件中的兩個不同路徑。在zip壓縮文件中可以使用硬鏈接嗎?
如果文件格式確實支持這個,我該如何使用Ubuntu中的免費工具創建這樣的存檔?
我正在創建一個zip存檔,其中包含兩個不同路徑的相同文件。 zip檔案格式是否支持類似Unix硬鏈接概念的東西?我的意思是隻能存儲文件一次(節省空間),但要將該數據blob索引到zip歸檔文件中的兩個不同路徑。在zip壓縮文件中可以使用硬鏈接嗎?
如果文件格式確實支持這個,我該如何使用Ubuntu中的免費工具創建這樣的存檔?
不,Zip file format不支持這一點。這是因爲本地文件頭包含有關該文件的信息,包括其名稱,緊接着是該文件的壓縮數據。兩個不同的本地文件頭不可能指向相同的壓縮數據。
正如@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沒有工作好。 考慮在您的應用程序中使用它。
當然,您需要在自己的環境中對文件進行更多的測試,以確定它是否真的是您需要的。你也可以玩選項來查看哪個級別的壓縮能獲得最佳的壓縮比率/速度平衡。
它如何做得更好?數字越大越好? – user321627 2017-07-23 05:09:07
@ user321627這個數字就是壓縮文件的大小,所以歸檔的規模越小越好 – Paker 2017-07-23 08:48:29
謝謝 - 我很懷疑,但希望可能有一個我沒有想到的技巧。 – Grampoulos 2012-01-14 02:32:29
根據https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT,在UNIX附加字段中,可變長度數據字段可以包含有關「符號或硬鏈接」的信息。這表明一些實現可以支持這一點。你不覺得嗎? – 2015-05-21 07:56:08