Linux Zip文件损坏超过4G字节-没有警告或错误-我是否丢失了数据?

Linux Zip文件损坏超过4G字节-没有警告或错误-我是否丢失了数据?,linux,macos,bash,zip,Linux,Macos,Bash,Zip,我使用如下命令在我的计算机(Mac OS X)上创建了一组zip文件: zip -r bigdirectory.zip bigdirectory 然后,我将这些zip文件保存在某个地方,并删除了原始目录 现在,当我尝试提取zip文件时,会出现以下错误: $ unzip -l bigdirectory.zip Archive: bigdirectory.zip warning [bigdirectory.zip]: 5162376229 extra bytes at beginning or

我使用如下命令在我的计算机(Mac OS X)上创建了一组zip文件:

zip -r bigdirectory.zip bigdirectory
然后,我将这些zip文件保存在某个地方,并删除了原始目录

现在,当我尝试提取zip文件时,会出现以下错误:

$ unzip -l bigdirectory.zip
Archive:  bigdirectory.zip
warning [bigdirectory.zip]:  5162376229 extra bytes at beginning or within zipfile
  (attempting to process anyway)
error [bigdirectory.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)
我发现这可能是因为zip无法处理超过一定大小的文件,可能是4 Gig。至少我在什么地方读到过

但是为什么zip命令允许我创建这些文件呢?讨论中的zip文件是9457464293字节,它让我可以制作更多类似的文件,而且绝对没有错误

很明显,它可以创建这些文件

我真的希望我的文件没有丢失。我已经吸取了教训,将来我会在删除原始文件之前检查我的档案,我可能还会使用另一种文件格式,如tar/gzip

但是现在,我能做什么?我真的需要我的文件

更新 有些人认为我的
unzip
工具不支持足够大的文件(这很奇怪,因为我使用了内置的OS X
zip
unzip
)。无论如何,我安装了一个新的
解压
自制
,瞧,我现在确实收到了一个不同的错误:

$ unzip -t bigdirectory.zip
testing: bigdirectory/1.JPG   OK
testing: bigdirectory/2.JPG   OK
testing: bigdiretoryy/3.JPG   OK
testing: bigdirectory/4.JPG   OK
:
:
file #289:  bad zipfile offset (local header sig):  4294967295
  (attempting to re-compensate)
file #289:  bad zipfile offset (local header sig):  4294967295
file #290:  bad zipfile offset (local header sig):  9457343448
file #291:  bad zipfile offset (local header sig):  9457343448
file #292:  bad zipfile offset (local header sig):  9457343448
file #293:  bad zipfile offset (local header sig):  9457343448
:
:
这真的很令人担忧,因为我需要这些文件。使用系统
zip
工具创建此zip文件时,绝对没有错误。事实上,我在同一时间做了几个,现在它们都表现出相同的问题

如果文件确实已损坏,如何修复它


或者,如果它没有损坏,如何提取它?

在执行硬盘格式之前,我在备份12GB目录时遇到了类似的问题。有趣的是,我使用了和你一样的命令

我四处阅读并找到了一些建议:

zip -F    

尝试修复该文件

不幸的是,这些都不起作用,我仍然收到错误

在进一步查看之后,我发现了ditto命令,它对我的原始(未接触)zip文件非常有效:

ditto -x -k original-file.zip dst-directory   

-x to extract an archive
-k Specifies it to be a PKZip archive instead of the default CPIO

使用此命令后,我成功地提取了所有文件。

在6以下解压缩失败,请使用

jar -xf <zipfile>
jar-xf
如果您安装了java,或者在注销文件之前再次解压缩


请参阅:

当我尝试
解压
压缩大文件(~7GB)时,遇到了完全相同的问题。我非常确定将zip文件复制到服务器时没有错误。(我用
rsync
再次检查了它)

根据您的情况,解决方案是:

1) 如果您在本地计算机上执行此操作,请右键单击zip文件并在此处提取
,这将适用于任何大小的(.zip)文件

2) 如果zip文件位于远程服务器中,请首先使用
sftp
sftp://username@server.url.address.com
)。之后,只需导航到目录并再次执行与(1)中相同的操作。i、 e.右键单击zip文件并将其解压缩

可能不是最好的解决方案,但这是一种方法。

试试
7z x
对于大于4GB的
.zip
文件,我在Linux上对
解压%x
时遇到了同样的问题,再加上
只有缩减的条目才能有EXT descriptor
错误

不过,命令
7z x
解决了我的所有问题


但是要小心,命令
7z x
将提取所有路径根在当前目录中的文件。选项
-o
允许指定输出目录。

内置的macOS存档实用程序(当您在Finder中选择某个内容并转到File->Compress“”时使用的默认工具)也会在存档中的文件超过4G字节时创建“损坏的”存档,归档文件本身的大小超过4G字节,或者您正试图将超过65536个文件压缩到一个zip文件中。这是因为它不使用Zip64扩展格式

这一点在2009年的博客文章中已经提到,现在已经不复存在的Springy实用程序中也有详细介绍。你也可以看到

但是为什么zip命令允许我创建这些文件呢

严格地说,这是一个错误。由于OSX附带的命令行版本的Infozip命令工具在OSX 10.11(El Capitan)之前的版本不高于5.52,因此只有在您强制其超过原始zip格式限制的情况下,它才能生成不一致的归档文件。Infozip 6.0及以上版本知道如何制作Zip64归档文件,该标准有很多优点。这个2014年,当最初提出这个问题时,最新的OSX是10.10(约塞米蒂)

如上所述,即使在macOS 10.15(Catalina)中,GUI归档实用程序仍然会创建这样的“损坏”拉链

如果文件确实已损坏,如何修复它

从某种意义上讲,它是腐败的,因为它的不一致性会导致许多一致性工具阻塞。您可以提取(见下文),然后使用知道如何生成Zip64文件的工具再次压缩

或者,如果它没有腐败,我如何提取它

从技术上讲,压缩文件中的所有数据仍在存档中,但允许快速列出zip内容的标题被破坏。当使用其他工具时,这种zip可能很难使用(即使在同一版本的macOS上使用命令行
unzip
工具测试这种zip,也可能会出现类似
无效压缩数据膨胀的问题
/
错误的zip文件偏移量(本地头信号)

要获取这些ZIP文件,您需要使用一个程序,该程序将安静地提取压缩的内容,而不检查一致性或尝试检查/列出文件。可执行此操作的工具示例包括:

  • macOS存档实用程序GUI工具
  • macOS命令行工具
    同上
  • 7拉链
  • 爪哇的<
    jar -xf <zipfile>
    
    zip -FF corrupted.zip --out fixed.zip