Shell-Script

如何使用 bash 腳本修復 onedrive 損壞的 zip

  • June 8, 2020

目前 onedrive 生成​​的 zip 文件被大多數軟體破壞。

https://www.bitsgalore.org/2020/03/11/does-microsoft-onedrive-export-large-ZIP-files-that-are-corrupt

正如我們在這裡看到的,解決方案是使用十六進制編輯器。由於我有很多大文件,我想要 bash 腳本解決方案……有可能嗎?

這是一個免費提供的測試文件:

https://zenodo.org/record/3715394

問題連結中提到的問題,Microsoft OneDrive 是否導出損壞的大型 ZIP 文件?, 是指 OneDrive 創建的大於 4Gig 的文件在 ZIP64 中有無效Total Number of Disks欄位的問題End Central Directory Locator。此欄位中的值應為 1,但 OneDrive(似乎是 Windows send-to-zip)將其設置為 0。這使得使用標準解壓縮實用程序處理這些文件變得困難/不可能。

unzip針對這些文件之一執行會產生如下輸出

$ unzip -l  onedrive-zip-test-zeros.zip
Archive:  onedrive-zip-test-zeros.zip
warning [onedrive-zip-test-zeros.zip]:  1073742329 extra bytes at beginning or within zipfile
 (attempting to process anyway)
error [onedrive-zip-test-zeros.zip]:  start of central directory not found;
 zipfile corrupt.
 (please check that you have transferred or created the zipfile in the
 appropriate BINARY mode and that you have compiled UnZip properly)

原始問題中的連結顯示瞭如何使用十六進製文件編輯器手動修復問題。或者,請參閱Fix-OneDrive-Zip以獲取將修復這些 OneDrive zip 文件的腳本。它所做的只是將值設置為 1,如果它被錯誤地設置為 0。

用法是

fix-onedrive-zip file1.zip 

在這種情況下

$./fix-onedrive-zip onedrive-zip-test-zeros.zip 

Checking 'onedrive-zip-test-zeros.zip'
Updated 'onedrive-zip-test-zeros.zip'

並檢查 zip 文件是否可以讀取

$ unzip -l onedrive-zip-test-zeros.zip 
Archive:  onedrive-zip-test-zeros.zip
 Length      Date    Time    Name
---------  ---------- -----   ----
1073741824  2020-03-18 14:48   onedrive-zip-test-zeros/file01.dat
1073741824  2020-03-18 14:51   onedrive-zip-test-zeros/file02.dat
1073741824  2020-03-18 14:54   onedrive-zip-test-zeros/file03.dat
1073741824  2020-03-18 14:57   onedrive-zip-test-zeros/file04.dat
1073741824  2020-03-18 15:01   onedrive-zip-test-zeros/file05.dat
---------                     -------
5368709120                     5 files

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