我正在尝试查找哪个 jar 包含一个类,我写了下面的内容,但似乎没有任何想法?
find -type f -name "*.jar" -exec jar -tvf "{}" \| grep MyClass \; -ls
答案1
这是行不通的,因为 find 直接调用 exec(3),因此,它不像 shell 那样解释命令行(来设置管道)。
当我需要做这样的事情时,我通常会将我想要的内容放入脚本中,这样我就可以执行 -exec script {} \;。另一个选择是
find . -type f -name "*.jar" -exec sh -c "jar -tvf '{}' | grep MyClass" \; -ls
FWIW,我个人的 findClassInJar 是
for x in `find . -name "*.jar" -o -name "*.zip"` ; do if unzip -l $x | grep -q $1 > /dev/null ; then echo $x ; fi ; done
它不适用于带有空格的目录,但我不会在项目中这样做。
答案2
我不太确定你想要什么...这里有一点 bash,显示包含 .class 文件的 .jar 文件的文件名。
for f in `find *.jar`; do if jar -tvf $f | grep class &>/dev/null; then echo $f; fi; done
您可以删除该echo $f
语句并将您自己的自定义内容放在其中,以及grep
在其中自定义命令。
希望能帮助到你。