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