一尘不染

列出多个jar文件的内容

java

我正在寻找一堆罐子里的.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

阅读 200

收藏
2020-12-03

共1个答案

一尘不染

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

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

否则xargs,命令行类似于jar tf file1.jar file2.jar...,其含义与预期的不同。

一种有用的调试技术是echo在要运行的命令之前粘贴xargs

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

这会打印出完整的jar命令,而不是执行它,这样您就可以看到它出了什么问题。

2020-12-03