Linux下无需解压和压缩查看,添加,删除jar包内文件

Linux下无需解压和压缩查看,添加,删除jar包内文件,第1张

t:列出档案目录

f:指定档案文件

使用zip命令,将lib/fastjson-1.2.83.jar加入abc.jar内

u:update: only changed or new files

r:recurse into directories

0:store only

使用zip命令,将abc.jar内的lib/fastjson-1.2.82.jar删除

https://www.jianshu.com/p/9efc96b3057a

https://www.cnblogs.com/grey-wolf/p/11291379.html

https://blog.csdn.net/xiligey1/article/details/82457140

https://stackoverflow.com/questions/4520822/is-there-a-quick-way-to-delete-a-file-from-a-jar-war-without-having-to-extract

试试这个: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/bash

find <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 就搞定了


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/yw/8678690.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-19
下一篇 2023-04-19

发表评论

登录后才能评论

评论列表(0条)

保存