(这是在剧本我在回答以前版本的改进,因为它在一些特殊awk
/丑报价的价格生产更清洁的输出。)
我已经建立了一个脚本(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]
的完全限定类名
点的字符将在“任何字符”的正则表达式的含义来解释但这不是什么大问题,因为这是一个启发式实用程序(这就是为什么它也不区分大小写)。通常我不打扰完整的类名,只输入它的一部分。
很好的问题。我一直遇到这个问题。不确定为什么它被关闭作为题外话。很奇怪 – Tagar 2017-07-03 20:24:41