我试图find一个JAR文件,其中包含我的类使用下面的命令在这个链接给出: find一个jar文件给类名?
find . -name "*.jar" -exec sh -c 'jar -tf {}|grep -H --label {} GenericClassLoader' \;
但我得到错误:
java.util.zip.ZipException: error in opening zip file at java.util.zip.ZipFile.open(Native Method) at java.util.zip.ZipFile.<init>(ZipFile.java:131) at java.util.zip.ZipFile.<init>(ZipFile.java:92) at sun.tools.jar.Main.list(Main.java:997) at sun.tools.jar.Main.run(Main.java:242) at sun.tools.jar.Main.main(Main.java:1167)
请帮我理解命令,以及如何解决这个错误。 我正在使用bash shell。
文件系统中有一些以*.jar
结尾但不是有效的归档文件。 要调试这个,添加-print
到find
命令:
find . -name "*.jar" -print -exec ...
这将使find
打印文件名之前尝试执行sh
命令。
说明:
find .
:查找当前目录中的所有文件和文件夹 -name "*.jar"
,名字以.jar
结尾 -exec
并为其中的每一个执行以下命令 sh -c
创建一个新的shell并执行… jar -tf {}
测试一个JAR文件。 这(也)打印存档中的文件列表find
会将其找到的存档的路径替换为{}
|
将jar -tf
的结果输入到… grep
搜索输入… -H
打印每个匹配的文件名 --label {}
由于我们从标准输入读取, grep
应该使用{}
(再次被find替代)作为文件名 GenericClassLoader
在jar -tf
的输出中搜索这个字符串