我正在寻找一堆罐子里的.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以强制它为jar从中获取的每个文件名运行单独的命令find:
-n 1
xargs
jar
find
find -name "*.jar" | xargs -n 1 jar tf
否则xargs,命令行类似于jar tf file1.jar file2.jar...,其含义与预期的不同。
jar tf file1.jar file2.jar...
一种有用的调试技术是echo在要运行的命令之前粘贴xargs:
echo
find -name "*.jar" | xargs echo jar tf
这会打印出完整的jar命令,而不是执行它,这样您就可以看到它出了什么问题。