我需要检查 1 个 jar 中的所有文件是否存在于另一个 jar 中。我不关心文件内容是否相同,只关心文件名。我可以在 vim 中打开每个 jar 并保存那些作为要比较的文件名列表的文本文件,但我有很多 jar 集要比较,所以如果可能的话我想完全自动化。
最佳答案
A jar file围绕 ZIP file format 构建并且通常包含一个 list 文件,它是包含在 jar 文件中的所有文件的列表。此 list (如果存在)将具有名称 META-INF/MANIFEST.MF
并且它将是一个文本文件。
因此,您可以通过从要比较的每个 jar 对中提取 list ,然后寻找差异来实现您想要的。
如果您有可用的 jar
命令,您可以使用以下命令提取 jar 文件的 list :
jar xf jar1.jar META-INF/MANIFEST.MF
如果可用,您也可以使用 unzip
来完成此操作。
从两个 jar 文件中提取 list 并使用 diff
比较它们的简单脚本如下所示:
#!/usr/bin/env bash
jar xf "$1" META-INF/MANIFEST.MF
mv META-INF/MANIFEST.MF m1.txt
jar xf "$2" META-INF/MANIFEST.MF
mv META-INF/MANIFEST.MF m2.txt
diff m1.txt m2.txt
脚本有两个参数,jar 文件。如果您希望 list 中的文件相同但顺序不同,您可以尝试先使用 sort
对它们进行排序。这只是脚本的骨架。您可能想要添加诸如文件清理、错误检查等内容。
如果您只关心 jar 文件中的文件,您可能会得到它们的列表:
jar tf jar1.jar
您也可以为此使用unzip
:unzip -l jar1.jar
如评论中所建议。
然后您可以以类似的方式将文件列表与 diff
进行比较,也许首先使用 sort
对它们进行排序。
还有一个相关的问题:How to read MANIFEST.MF file from JAR using Bash .
关于linux - 比较 2 个 jar 文件中的文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48450030/