java - 列出多个jar文件的内容

标签 java linux shell jar

我正在一堆 jar 中搜索 .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

最佳答案

您需要将 -n 1 传递给 xargs 以强制它为从 查找:

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

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

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

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

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

关于java - 列出多个jar文件的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7770183/

相关文章:

java - 为什么默认解析器(使用 commons-cli)在选项无法识别时不会抛出异常?

c++ - CMake:使用静态库的共享库

linux - 是否可以将 docker 容器内的用户映射到外部用户?

shell脚本获取两个日期之间的差异

bash - 基于文件位置而不是当前工作目录的相对路径

具有基本 if/else 和基于模式运行的进程计数的 Bash 脚本

java - 使用正则表达式解析

java - 从 GKE 连接到 Google Cloud SQL 数据库的方法比较

c - 我如何检测目录何时使用 inotify 挂载?

java - 为什么我的数据库连接在没有 @Transactional 的情况下会泄漏?