gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 09:48:37 36 4
gpt4 key购买 nike

我正在尝试使用此链接中给出的以下命令查找包含我的类的 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/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com