在 find exec 语句中使用管道

在 find exec 语句中使用管道

我正在尝试查找哪个 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在其中自定义命令。

希望能帮助到你。

相关内容