如何控制ZIP存档中文件的顺序?


14

有时,ZIP存档中的文件有必要按特定顺序排列(例如,我当前正在创建EPUB,这要求ZIP中的第一个条目为mimetype文件)。如何在Windows上执行此操作?

我目前使用7-Zip作为存档程序,但没有看到用于控制文件顺序的选项。可以使用7拉链吗?如果没有,我有什么选择?


3
按照需要添加它们的顺序执行此操作。尝试首先压缩mimetype文件,然后将其他文件添加到zip中作为第二个操作。
保罗

1
@Paul-令人惊讶的是,那没有用。:-/
Ben Blank

也许是LIFO?您可以尝试最后添加mimetype吗?您正在针对epub阅读器进行测试,而不仅仅是解压缩?
保罗

3
要求内容按特定顺序排列的应用程序已损坏。
psusi'2

3
Sheesh,该规范的作者需要撤回并以四分之三的优势加以殴打。
psusi'2

Answers:


5

7-zip GUI版本:

  1. mimetype从EPUB文件中提取
  2. mimetype在EPUB文件中删除
  3. 重命名mimetype!mimetype
  4. 添加!mimetype到EPUB文件
  5. 重命名!mimetypemimetype内部EPUB文件

7-zip简单拖放版本:

转到7-zip下载页面并下载7-Zip Extra: standalone console version, 7z DLL, Plugin for Far Manager(不适用于稳定的9.20,但适用于9.38 beta和15.06 beta)。提取物7za.exe。将以下代码另存为repair.bat文件:

7za x %1 mimetype -y
7za d %1 mimetype
move /y mimetype !mimetype
7za a %1 !mimetype
del /f !mimetype
7za rn %1 !mimetype mimetype

7za.exerepair.bat放在同一目录中,只需将EPUB文件拖到即可repair.bat


3

一种方法是:大多数存档器和存档工具都可以向原始存档附加或添加其他文件项。使用顶部所需的项目创建档案,然后将其他文件项添加到创建的档案中。我知道这在Windows自己的ZIP工具中有效。

似乎真正的答案不在我这里,在这里为C# /programming/5898787/creating-an-epub-file-with-a-zip-library

此处为HTML(使用7z)
http://next.blurb.com/2011/02/17/how-to-make-an-ipad-photo-book/

具体来说这部分

2.打开sample-photo-book文件夹,然后将文件的模仿类型复制到(空)存档中。
3.现在,将其他文件夹(META-INF和OEBPS)复制到存档中。


http://idpf.org/epub/30/spec/epub30-ocf.html#physical-container-zip

mimetype文件的内容不得包含任何前导填充或空格,并且不得以Unicode签名(或字节顺序标记)开头,并且MIME类型字符串的大小写必须与上面所述完全相同。另外,mimetype文件必须既不压缩也不加密,并且其ZIP标头中不得有多余的字段。


1
我尝试使用7-zip( 创建一个存档mimetype,然后添加其他文件),但是没有成功。该mimetype 数据是先在文件中,但文件表似乎是按字母顺序排列。
本·布兰克

2
@BenBlank确保您未使用zip客户端进行检查-它们将以适合人类的方式重新订购,而不一定是epub阅读器会看到的内容。
保罗

大概的问题是7-Zip喜欢按alpha顺序维护它的目录,然后在关闭zip文件时(有必要)重写它。从理论上讲,可以通过使用十六进制编辑器或某种临时工具编辑zip文件并重新排列目录来解决此问题-这并不是特别复杂。通过包含始终排在第一位的虚拟文件,可以简化编辑。但是,当然,上面链接中的技术也应该起作用。
Daniel R Hicks '02

我曾经7z l filename.zip列出过zip的内容,但它们似乎没有任何顺序(名称,路径,日期,大小...)。因此,使用此命令行可能有助于确定zip中文件的真实顺序。
Scott McClenning

@Paul —我正在通过.epub在文本编辑器中打开并直接检查文件表来进行检查,因此看来这种方法对我不起作用。我将用Python来解决这个问题,看看是否能解决这个问题。
本·布兰克

2

创建EPUB需要两步过程,首先添加没有任何(!)压缩的mimetype,其次添加其他文件/文件夹。因此,使用7z,您可以执行以下命令:

7z a -mx=0 dummy.zip mimetype

为了能够使用通配符*,您应该将文件mimetype移动到另一个文件夹并开始第二步:

7z a -r dummy.zip *

之后,将ZIP重命名为EPUB,您就走了!


:我刚才已经尝试这样做,我仍然得到这个错误Epubcheck Version 3.0.1 ERROR: C:/MYSELF/Books/1984---George-Orwell/1984---George-Orwell.epub: Mimetype entry missing or not the first in archive
恢复莫妮卡-托马什Zato

1

以我的经验,最简单的答案(对于Windows 7、64位)是使用Window的内置Zip功能。使用“发送到”将模仿类型发送到新的压缩文件夹,然后使用7Zip将META-INF和OEBPS添加到新的zip。在首先对mimetype文件进行排序方面,这似乎总是可行的。我仅使用7-zip执行此操作还没有成功。(这适用于ePUBS,但在其他领域也应适用于排序)。

我希望这可以帮助其他人。


0

使用winrar对我有用。我将mimetype添加到zip归档文件中(未压缩!),然后又添加了其余文件夹(常规压缩)。

对于我来说,此解决方案不适用于7-zip,因为它一直在对文件进行重新排序。


0

使用EPUB文件时,我遇到了同样的问题。

在Windows 7上,我用一个奇怪的技巧修复了该错误,在该技巧中,我确保将要制作成zip的所有文件都排序为某种方式,从而使mimetype成为顶部的文件(通常按大小排序)。然后,在将它们发送到压缩(zip)文件夹(例如:https : //support.microsoft.com/en-us/help/14200/)之前,请确保使用光标从上至下标记所有文件。Windows-compress-uncompress-zip-files)。之后,我可以将名称和文件类型更改为任何 .epub。

但是,在我升级到Windows 10之后,此技巧不再起作用。幸运的是,我找到了另一种方法。首先,将所需的zip文件顶部(MIME类型)的文件发送到压缩(zip)文件夹中。确保只有该文件。比起我要压缩的其他文件(在我的情况下为两个文件夹),用光标标记它们,并将它们向上拖动到刚创建的zip文件中。然后,Windows将新文件添加到zip文件中,并将最初压缩后的文件保留在顶部。


1
您能否清楚说明作者的问题的答案是什么?升级到Windows 10并不是这个问题的真正答案。您应该专注于解决问题的方式,提供具体细节,您的陈述是广泛的方法。 如果我要重现原始问题,将无法用您的答案解决。
拉姆猎犬,2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.