Linux 比较两个jar文件中的文件名?

Linux 比较两个jar文件中的文件名?,linux,bash,jar,Linux,Bash,Jar,我需要检查一个jar中的所有文件是否存在于另一个jar中。我不在乎文件内容是否相同,只在乎文件名。我可以在vim中打开每个jar并保存作为要比较的文件名列表的文本文件,但是我有很多jar集要比较,所以如果可能的话,我想完全自动化它。a是围绕构建的,通常包含一个清单文件,该清单文件是jar文件中包含的所有文件的列表。此清单(如果存在)的名称为META-INF/manifest.MF,它将是一个文本文件 因此,可以通过从要比较的每个jar对中提取清单,然后查找差异来实现您想要的 如果有可用的jar命

我需要检查一个jar中的所有文件是否存在于另一个jar中。我不在乎文件内容是否相同,只在乎文件名。我可以在vim中打开每个jar并保存作为要比较的文件名列表的文本文件,但是我有很多jar集要比较,所以如果可能的话,我想完全自动化它。

a是围绕构建的,通常包含一个清单文件,该清单文件是jar文件中包含的所有文件的列表。此清单(如果存在)的名称为
META-INF/manifest.MF
,它将是一个文本文件

因此,可以通过从要比较的每个jar对中提取清单,然后查找差异来实现您想要的

如果有可用的
jar
命令,可以使用以下命令提取jar文件的清单:

jar xf jar1.jar META-INF/MANIFEST.MF
如果您有
解压
,也可以这样做

从两个jar文件中提取清单并使用
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文件。如果您希望清单中的文件相同但顺序不同,可以尝试先使用
sort
对它们进行排序。这只是脚本的骨架。您可能需要添加文件清理、错误检查等内容

如果您只关心jar文件中的文件,您可以通过以下方式获得这些文件的列表:

jar tf jar1.jar
您也可以使用
unzip
来执行此操作:
unzip-l jar1.jar
,如注释中所建议的

然后,您可以以类似的方式将文件列表与
diff
进行比较,可能首先使用
sort
对它们进行排序

还有一个相关的问题:.

“我需要检查一下”…那么您需要脚本退出true/false还是在第一个而不是第二个jar中输出文件列表?对于后一种情况,这可以:

#!/bin/bash
(jar tf "$1";jar tf "$2";jar tf "$2") | \
    sort | uniq -c | perl -pe's/^\s*([23]\s+.*\n|1\s+)//'
将其存储在\u first\u jar中的
files\u just\u中
并在\u first\u jar中运行
chmod+x files\u just\u
并使用以下工具进行测试:

./files_just_in_first_jar bundle1.jar bundle2.jar

你基本上是要求我们做你的工作。提示:
unzip-l
将列出jar文件的内容。请慢慢阅读如何下载和更新您的文件。播放
diff
的结果。如果我没有弄错的话,给我两个有序的文件列表
l1
l2
diff l1 l2 | egrep'^unzip-l,再加上awk、sort和comm,对我有效。我不知道解压-l,谢谢。