无法在 Ubuntu 18.10 上提取 OneDrive ZIP 文件

无法在 Ubuntu 18.10 上提取 OneDrive ZIP 文件

因此我从 OneDrive 下载了一个 45GB 的目录,并以 zip 文件的形式保存在我的 Ubuntu VM 上。

现在,当我尝试通过 GUI 提取它时,它会给我一个错误,说档案是空的。

当我尝试unzip通过终端使用该命令时,它出现错误:

警告 [Archive.zip]: zip 文件开头或内部有 43855246100 个额外字节(无论如何尝试处理)

错误 [Archive.zip]:未找到中央目录的启动;zip 文件已损坏。

(请检查您是否已在适当的二进制模式下传输或创建了 zip 文件,以及是否已正确编译 UnZip)

https://stackoverflow.com/questions/27151176/zip-files-corrupt-over-4-gigabytes-no-warnings-or-errors-did-i-lose-my-data/31084012

从上面的链接我了解到,对于大于 4GB 的档案,解压会失败。

所以我尝试了其他多个选项,例如tar xvf,,jar xf7z x

  1. 对于tar xvf,我得到

tar:这看起来不像是 tar 档案

tar:跳至下一个标题

  1. 对于7z x,档案被提取,但出现以下错误:

标头错误

未经确认的档案开始日期

警告

存档结束后还有数据

此外,原始(下载的)zip文件中应该有一些.rar文件,但这些文件在解压位置却丢失了。

  1. 对于jar xf,我收到错误:

JAR 文件中有错误!(未压缩但有数据描述)

当我尝试跑步时zip -T Archive.zip,我得到了

无法找到 Archive.z01

点击 c(将路径更改为此分割文件所在的位置)

q(中止存档 - 退出)

或 ENTER(尝试再次读取此分割):

OneDrive 有可能给我一个损坏的档案吗?

答案1

我知道这个问题是一年多前发布的,但在遇到看似完全相同的问题后,我可能能够提供一些答案。此互操作性问题最可能的原因是 OneDrive 对 ZIP64 扩展的实现,更准确地说是“中央目录定位器的 zip64 结尾”中“磁盘总数”字段的值。在 OneDrive 文件中,此值设置为 0(零),而大多数阅读器工具期望值为 1。

欲了解更多信息,请参阅我在博客上发布的详细文章:

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

如果您对十六进制编辑很熟悉,您可以通过更改十六进制编辑器中“磁盘总数”字段的第一个字节来临时“修复”受影响的文件,有关详细信息,请参阅我的博客文章。

更新:部分受我的博客文章的启发,有人编写了一个 Perl 脚本,可以自动修复这些文件,有关更多详细信息,请参阅此链接:

https://unix.stackexchange.com/a/590034

脚本的直接链接:

https://github.com/pmqs/Fix-OneDrive-Zip

此外,这来自 Microsoft 的支持页面说(从顶部开始第三个‘注释’部分):

下载受以下限制:单个文件大小限制:10GB;总 zip 文件大小限制:20GB;文件总数限制:10,000。

因此对于 45 GB 的目录,您也可能会达到这些大小限制。

答案2

我知道这不是一个真正的程序员的答案,但是如果你只是在每个文件上按下下载而不是多个文件上按下下载,那么 OneDrive 就不会压缩它 XD

在此处输入图片描述

相关内容