4

我正在做一些测试,以确保我使用脚本文件创建的多合一 zip 文件将产生与我必须手动单击并通过 Web 界面创建的几个 zip 文件的内容相同的输出。因此,zip 将具有不同的文件夹结构。

当然,我可以手动提取它们并使用我强大的眼球技术来扫描它们,甚至更懒惰我可以编写一个脚本来做到这一点,但在我投入更多时间并被我的老板指责为公司时间抢劫之前,我在问如果有更好的方法来做到这一点?

顺便说一下,我正在使用 perl LAMP 堆栈。谢谢。

4

4 回答 4

3

您可以使用 perl 的Archive::ZIP或 Python 的zipfile来提取档案中文件的文件名、大小和 CRC 校验和。创建一个包含按文件名排序的结果的文件(忽略路径)。

对于较小的 ZIP,请合并脚本 ( cat list1 list2 list3 | sort) 的结果。

现在,您可以使用diff来比较结果。

于 2009-02-12T10:38:06.713 回答
1

我可以全心全意地推荐Beyond Compare。除非你真的得到了过低的报酬,否则这对你(老板)来说是最大的收获。

[编辑] 我似乎已经扫描了不同的文件夹结构,对此感到抱歉。Beyond Compare 可以比较具有相同文件夹结构的文件夹中的所有文件。它没有(我相信)在不同文件夹中的文件中搜索匹配项的智能。

问候,
利文

于 2009-02-12T09:23:19.030 回答
1

从 Carra 的回答中得到启发...如果 A.zip 是您的单个大存档,而 B.zip 是通过网络生成的存档,则使用以下算法

  1. 从 A.zip 中提取所有文件并递归(wrt 文件夹)计算提取内容的文件夹中存在的文件的校验和(使用cksummd5sum),并在将其排序(通过管道sort)到文件后保存此信息(例如A.txt)

  2. 对 B.zip 执行相同操作并生成 B.txt

  3. 比较 A.txt 和 B.txt 他们应该是完全一样的。

或者

用于unzip -l获取 (zip) 存档的文件/目录列表,然后展平用户生成的 zip 文件的层次结构,并使用诸如diff. 通过扁平化层次结构,我的意思是您可能需要对一个或两个列表进行某种预处理,然后才能与diff.

于 2009-02-12T09:26:13.330 回答
1

为您的文件创建一个 crc 校验和。

如果原始文件和解压缩文件的校验和相同,则可以确定文件相同。甚至适用于非文本数据。

校验和可以很容易地使用外部程序(例如“SFV Checker”)或以编程方式创建(例如,.net/java 包含执行此操作的库)。

于 2009-02-12T09:29:27.550 回答