我在一堆jars中搜索一个.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
发布于 2011-10-14 23:52:10
您需要将-n 1
传递给xargs
,以强制它为从find
获取的每个文件名运行单独的jar
命令
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
命令,而不是执行它,这样您就可以看到它出了什么问题。
发布于 2015-09-28 12:11:30
我遇到过类似的情况,我需要在目录中存在的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
Shell脚本摘自:http://alvinalexander.com/blog/post/java/shell-script-search-search-multiple-jar-files-class-pattern
发布于 2011-10-14 23:55:41
您还可以使用find的-exec
选项
find . -name "*.jar" -exec jar tf {} \;
https://stackoverflow.com/questions/7770183
复制相似问题