目前,onedrive 生成的 zip 文件对大多数软件来说都是损坏的。
正如我们在这里看到的,解决方案是使用十六进制编辑器。由于我有很多大文件,我想要 bash 脚本解决方案...可能吗?
这是一个免费提供的测试文件:
答案1
问题链接中提到的问题,Microsoft OneDrive 是否会导出损坏的大型 ZIP 文件?,指的是由 OneDrive 创建的大于 4Gig 的 zip 文件Total Number of Disks
在 ZIP64 中存在无效字段的问题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)
原始问题中的链接显示了如何使用十六进制文件编辑器手动修复问题。或者,请参阅修复 OneDrive-Zip用于修复这些 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