linux下如何查找当前目录下所有jar包中包含AAA内容的class文件名
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux下如何查找当前目录下所有jar包中包含AAA内容的class文件名相关的知识,希望对你有一定的参考价值。
如:
a.jar
b.jar
.
n.jar
多个jar包,每个jar包中都是.class文件,想列出这些jar包中包含AAA内容的class文件名或jar包名,就是想知道N个jar包中哪个jar包中的class有包含AAA内容。
不能解开环境上的jar包,解开我就知道了 谢谢
find ./ -name "*.class" | xargs grep 'AAA' -l
试试这个: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:$name;jar -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执行即可。
手上meiyoulinux,没法试,你试试。追问
思路是可以,但这样会残留大量class文件在环境中,不能解开jar
追答那我也不会了,或许你可以找个工具来测试jar包中的文件。
找一找,应该有这样的程序
然后才去判断
find . -name "*.jar"|awk 'print "jar -tvf "$1'|sh|xargs grep AAA|awk -F: 'print $1'|sort|uniq 参考技术C jar tf a.jar b.jar c.jar | grep "AAA"追问
jar包是未知的,有N个
追答jar tf *.jar | grep "AAA"
linux下如何查找需要的文件后并删除
1.首先查找指定目录下的文件,默认为当前目录
使用命令:find . -name ‘a.txt‘
会得到当前目录下所有包括子孙目录下的所有后缀为txt的文件
2.查找后删除
使用命令:find . -name ‘a.txt‘ |xargs rm -rf
会删除所有当前目录下所有子孙目录下所有后缀为txt的文件
以上是关于linux下如何查找当前目录下所有jar包中包含AAA内容的class文件名的主要内容,如果未能解决你的问题,请参考以下文章
JAVA 如何使用jar打包当前目录下的 所有文件夹 及 所有文件