use*_*854 21 java linux shell jar
我在一堆罐子里面搜索一个.class文件.
jar tf abc.jar
Run Code Online (Sandbox Code Playgroud)
适用于一个文件.我试过了
find -name "*.jar" | xargs jar tf
Run Code Online (Sandbox Code Playgroud)
没有打印.我能想到的唯一解决方案是解压缩所有,然后搜索.有没有更好的办法?我在LUnix上.
编辑:扫描多个jar时,将jar文件名与类一起打印很有用.这种方法效果很好:
find . | grep jar$ | while read fname; do jar tf $fname | grep SchemaBuilder && echo $fname; done
Run Code Online (Sandbox Code Playgroud)
产生的样本输出:
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
Run Code Online (Sandbox Code Playgroud)
NPE*_*NPE 33
您需要传递-n 1以xargs强制它为jar它获取的每个文件名运行单独的命令find:
find -name "*.jar" | xargs -n 1 jar tf
Run Code Online (Sandbox Code Playgroud)
否则xargs的命令行看起来像jar tf file1.jar file2.jar...,其含义与预期的不同.
一个有用的调试技术是echo在命令运行之前坚持xargs:
find -name "*.jar" | xargs echo jar tf
Run Code Online (Sandbox Code Playgroud)
这将打印出完整的jar命令而不是执行它,这样你就可以看出它有什么问题.