Zip

這個用於創建多段存檔的 zip 命令有什麼問題?

  • September 19, 2017

看著這個問題,我很好奇是否zip可以在文件管理器上下文菜單中使用命令來創建多個 20MB zip 文件(gmail 消息接受的級別)。該問題的答案表明可以輕鬆創建多個文件,但我想知道rar文件是否可以訪問。7z``zip

這裡介紹的命令應該可以工作。在終端和 Thunar 自定義操作中,我使用此命令看到了相同的結果:

zip my_archive.zip -r /path/to -s 20m

Thunar 的版本是

zip my_archive.zip -r %f -s 20m

但是無法打開生成的存檔(my_archive.z01、my_archive.z02、my_archive.z03…、my_archive.zip )。

也許這是意料之中的,正如我在這裡看到的那樣,這些生成的文件必須在“解壓縮”之前“未拆分”,使用命令

zip -s 0 my_archive.zip --out unsplit.zip

(我不得不說我沒想到需要這樣做,因為通常其他多文件存檔在提取之前不需要重新加入,甚至存檔拆分hjsplit也可以提供多個可以直接提取的存檔卷.但那是另一回事。)

只是該unsplit.zip文件在提取時也會出錯。

$ unzip unsplit.zip
Archive:  unsplit.zip
 inflating: home/cip/Desktop/R/Interviu/20170918.3gpp  
 error:  invalid compressed data to inflate

存檔無法提取,但可以打開(在存檔管理器中探索),並且它具有奇怪的文件夾內文件夾結構(反映最初創建它的路徑;如上inflating一行所示)。

怎麼了?

這是一個已知問題:它無法重新組合按zip內部緩衝區大小 (16KiB) 倍數拆分的檔案。現在您需要拆分為不同的大小……在您的情況下,20971519(20MiB 減去一個字節)應該可以正常工作。

(我嘗試手動重新組合拆分存檔,但zip -FF查找存檔組件並無法修復組合文件。)

事實證明,File Roller支持拆分存檔(不遵循分段存檔格式),因此如果您的收件人都使用它(或者可能是其他使用libarchive的存檔器),您可以使用split或類似工具拆分存檔。為此,您需要使用split的預設後綴、aa等生成文件ab

split -b20m archive.zip split.z

然後 File Roller 將讓您打開split.zaa,並透明地提取整個存檔(只要所有片段都明顯存在)。

引用自:https://unix.stackexchange.com/questions/393163