试试这个:find . -name "*.jar"|awk '{print "jar -tvf "$1}'|sh|grep AAA
补充:题主的问题不解开jar包用命令解决不了,上述命令仅用于查找jar包中class文件名称包含AAA关键字的,而不是内容,下面的命令可以输出jar包名称及其含有AAA关键子名称的class文件:
find . -name "*.jar"|while read name do echo file:$namejar -tvf $name|grep AAA done
另:在windows下当你双击打开jar包,然后双击class文件查看其内容,也是临时解压后打开的,所以要查看jar包中class文件的内容,你不解开怎么能做到呢?
要达到题主的目标,只能解开,方法如下:
编辑一个shell脚本,名称随意,如findAAA.sh,内容如下:
#!/bin/bashfind <path> -name "*.jar"|while read jarname #这里<path>修改为你要在哪个目录下查找jar及class文件
do
echo "Processing jar-file:$jarname"
mkdir /tmp/jartmp #临时解开放置的目录
cd /tmp/jartmp
jar -xf $jarname
find . -name "*.class"|while read cname
do
findflag=$(strings $cname|grep AAA) #class文件都是二进制的,用strings查看
if [ "$findflag"x != x ]then
echo "Class File: $cname include keyword AAA"
fi
done
rm -rf /tmp/jartmp #删除临时文件
done
编辑好脚本后,sh findAAA.sh执行即可。
find /目录1 -name '*.jar' -exec jar -xvf {} /目录2 \find /目录2/ -name '*.class' -exec cp {} /目录3 \
目录1是要查找的目录,目录2是临时存放解压文件的目录,目录3是要放文件的目录,之后如果不要目录2的再rm -rf /目录2 就搞定了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)