在JAR中查找Linux中的类文件

我试图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结尾但不是有效的归档文件。 要调试这个,添加-printfind命令:

 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替代)作为文件名
  • GenericClassLoaderjar -tf的输出中搜索这个字符串