現在、OneDriveは、ほとんどのソフトウェアで壊れているZipファイルを生成します。
ここでわかるように、解決策は16進エディタを使用することです。大きなファイルがたくさんあるので、bashスクリプトソリューションが必要です...それは可能ですか?
これは自由に利用できるテストファイルです:
質問のリンクで言及されている問題 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