Shell-Script
如何使用 bash 腳本修復 onedrive 損壞的 zip
目前 onedrive 生成的 zip 文件被大多數軟體破壞。
正如我們在這裡看到的,解決方案是使用十六進制編輯器。由於我有很多大文件,我想要 bash 腳本解決方案……有可能嗎?
這是一個免費提供的測試文件:
問題連結中提到的問題,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