我在一堆罐子里面搜索一个.class文件。
jar tf abc.jar
适用于一个文件。我试过了
find -name "*.jar" | xargs jar tf
什么都不打印。我能想到的唯一解决方案是解压缩所有,然后搜索。有没有更好的办法?我在卢尼克斯。
修改: 扫描多个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
答案 0 :(得分:32)
答案 1 :(得分:2)
我遇到了类似的情况,我需要在目录中的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
答案 2 :(得分:1)
您还可以使用find
的-exec
选项
find . -name "*.jar" -exec jar tf {} \;
答案 3 :(得分:1)
这是我在Cygwin中使用的内容。它支持上面要求的每个jar文件的节标题。
find . -name "*.jar" \
-exec echo ======\ {}\ ====== \; \
-exec /c/Program\ Files/Java/jdk1.7.0_45/bin/jar.exe tf {} \; | less
对于* nix,请删除“.exe”:
find . -name "*.jar" \
-exec echo ======\ {}\ ====== \; \
-exec jar tf {} \; | less
答案 4 :(得分:0)
你也可以使用比jar更快的解压缩(-l选项来打印zip内容)。
例如,一个小型脚本大致可以执行您想要的操作:
#!/bin/bash
for i in $(find . -name "*.jar")
do
if [ -f $i ]
then
echo $i
unzip -l $i | grep $*
fi
done
答案 5 :(得分:0)
我没有看到使用exec的必要性,这在Windows上的Cygwin中对我有用:
find . -name "*.jar" | while read jarfile; do unzip -l $jarfile | fgrep "foo" ; done
答案 6 :(得分:0)
查找jar文件,并将所有类和成员保存在txt中。
d0 := data[0] // Define d0 as a string
ss := strings.Split(d0, ",") // OK: Define ss as a []string
答案 7 :(得分:0)
如果您遇到此问题,并且需要在Windows环境中提取所有jar文件,请导航到保存所有jar文件的目录,并保存具有以下内容的批处理文件:
for /r %%f in (*) do jar -xvf %%f
通过运行批处理文件,它将提取目录中的每个jar文件。这里唯一的事情是它将提取到jar文件所在的目录中。
答案 8 :(得分:-1)