Linux Zip文件损坏超过4G字节-没有警告或错误-我是否丢失了数据?
我使用如下命令在我的计算机(Mac OS X)上创建了一组zip文件: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
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 Xzip
和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