(这是对我在以前版本的答案中的脚本的改进,因为它以一
些特殊/丑陋的引用为代价产生了更清晰的输出。
我构建了一个脚本()来做到这一点。findinjars
#!/usr/bin/env bash
if [[ ($# -ne 1) && ($# -ne 2) ]]
then
echo "usage is $0 <grep pattern to look for in 'jar tvf' output> [<top-of-dir-tree> or, if missing, current dir]"
else
THING_TO_LOOKFOR="$1"
DIR=${2:-.}
if [ ! -d $DIR ]; then
echo "directory [$DIR] does not exist";
exit 1;
fi
find "$DIR" -iname \*.jar | while read f ; do (jar tf $f | awk '{print "'"$f"'" " " $0}' | grep -i "$THING_TO_LOOKFOR") ; done
fi
然后,您可以使用以下命令调用它:
$findinjars a.b.c.d.Class [directoryTreeRoot or, if missing, current dir]
或者只是
$findinjars partOfClassName [directoryTreeRoot or, if missing, current dir]
完全限定类名中的点字符将以“任何字符”的正则表达式意义上解释,但这没什么大不了的,因为这是一个启发式实用程序(这就是为什么它太不区分大小写的原因)。通常我不会打扰完整的类名,只需键入其中的一部分。