web-dev-qa-db-ja.com

OneDriveの破損したzipをbashスクリプトで修正する方法

現在、OneDriveは、ほとんどのソフトウェアで壊れているZipファイルを生成します。

https://www.bitsgalore.org/2020/03/11/does-Microsoft-OneDrive-export-large-Zip-files-that-are-corrupt

ここでわかるように、解決策は16進エディタを使用することです。大きなファイルがたくさんあるので、bashスクリプトソリューションが必要です...それは可能ですか?

これは自由に利用できるテストファイルです:

https://zenodo.org/record/3715394

4
Freedo

質問のリンクで言及されている問題 Microsoft OneDriveは破損している大きなZipファイルをエクスポートしますか? は、4Gigより大きいOneDriveで作成されたファイルに無効なTotal Number of Disks Zip64のフィールドEnd Central Directory Locator。このフィールドの値は1である必要がありますが、OneDrive(Windowsのsend-to-Zipと思われます)は0に設定します。これにより、標準の解凍ユーティリティを使用してこれらのファイルを操作することが困難/不可能になります。

これらのファイルの1つに対して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)

元の質問のリンクは、hexファイルエディターで問題を手動で修正する方法を示しています。または、これらのOneDrive Zipファイルを修正するスクリプトについては Fix-OneDrive-Zip を参照してください。誤って0に設定されている場合は、値を1に設定するだけです。

使い方は

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
5
pmqs