bash - 在 Linux 中查找 JAR 中存在的类文件

标签 bash unix jar

我正在尝试使用此链接中给出的以下命令查找包含我的类的 JAR 文件:Find a jar file given the class name?

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

关于bash - 在 Linux 中查找 JAR 中存在的类文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16356061/

相关文章:

linux - 在 exec 之前回显命令+变量扩展

bash - Uniq 许多文件到位

bash - UNIX:在 $PWD 以上的目录中查找文件

java - 如何在 Runnable JAR 中存储和检索属性?

java - 适当的浏览器嵌入JavaFX应用程序部署是什么样的?

java - 使用从 jar 文件导入的类从 cmd 运行 java 程序

Windows 10 上的 Bash 无法正常工作

bash - 简单的bash函数来检查ssh session 是否成功

c - Linux,bash 脚本内存不足,无法交互,不是 ulimit?

c - 与 O_CREAT|O_EXCL 相反