列出多个 jar 文件的内容

2022-09-01 22:53:02

我正在一堆罐子里寻找一个.class文件。

jar tf abc.jar 

适用于一个文件。我试过了

find -name "*.jar" | xargs jar tf

不打印任何内容。我能想到的唯一解决方案是全部解压缩,然后搜索。有没有更好的方法?我在LUnix上。

编辑:扫描许多 jar 时,将 jar 文件名与类一起打印非常有用。此方法效果很好:

find . | grep jar$ | while read fname; do jar tf $fname | grep SchemaBuilder && echo $fname; done

生成的示例输出:

  1572 Wed Jul 25 10:20:18 EDT 2007 org/apache/ws/commons/schema/SchemaBuilder$1.class
  1718 Wed Jul 25 10:20:18 EDT 2007 org/apache/ws/commons/schema/SchemaBuilder$2.class
 42607 Wed Jul 25 10:20:18 EDT 2007 org/apache/ws/commons/schema/SchemaBuilder.class
./XmlSchema-1.3.2.jar
  1572 Wed Jul 25 10:20:18 EDT 2007 org/apache/ws/commons/schema/SchemaBuilder$1.class
  1718 Wed Jul 25 10:20:18 EDT 2007 org/apache/ws/commons/schema/SchemaBuilder$2.class
 42607 Wed Jul 25 10:20:18 EDT 2007 org/apache/ws/commons/schema/SchemaBuilder.class
./XmlSchema.jar

答案 1

您需要传递给 以强制它为它从中获取的每个文件名运行单独的命令:-n 1xargsjarfind

find -name "*.jar" | xargs -n 1 jar tf

否则,的命令行看起来像 ,它与预期的含义不同。xargsjar tf file1.jar file2.jar...

一种有用的调试技术是坚持在命令之前运行:echoxargs

find -name "*.jar" | xargs echo jar tf

这将打印出完整的命令,而不是执行它,以便您可以看到它有什么问题。jar


答案 2

我遇到了类似的情况,我需要在目录中存在的jar文件列表中搜索类。我也想知道这个类属于哪个jar文件。我使用了下面的代码片段(shell脚本),发现很有帮助。下面的脚本将列出包含要搜索的类的jar文件。

#!/bin/sh
LOOK_FOR="codehaus/xfire/spring"
for i in `find . -name "*jar"`
do
  echo "Looking in $i ..."
  jar tvf $i | grep $LOOK_FOR > /dev/null
  if [ $? == 0 ]
  then
    echo "==> Found \"$LOOK_FOR\" in $i"
  fi
done

外壳脚本取自: http://alvinalexander.com/blog/post/java/shell-script-search-search-multiple-jar-files-class-pattern


推荐