You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解析含find、grep、awk的Linux脚本:请求详细解读

这段Linux脚本的完整执行逻辑解读

首先贴出完整脚本:

find . -name '*.nar' | while read NARFILE; do 
  if jar tvf $NARFILE | grep -q jackson-databind; then
    OUTPUT=$(jar tvf $NARFILE | grep jackson-databind)
    echo $NARFILE':'$OUTPUT
  fi
done | 
grep '\-2.9.10.jar' | 
awk -F':' '{print $1}' | while read NARFILE; do
  jar uvf $NARFILE META-INF/bundled-dependencies/jackson-databind-2.9.10.8.jar
  jar xvf $NARFILE META-INF/DEPENDENCIES
  sed -i '/jackson-databind/s/2.9.10$/2.9.10.8/' META-INF/DEPENDENCIES
  jar uvf $NARFILE META-INF/DEPENDENCIES
  zip -d $NARFILE  META-INF/bundled-dependencies/jackson-databind-2.9.10.jar 
done

第一阶段:筛选出需要更新的.nar文件

这部分核心是定位内嵌了jackson-databind-2.9.10.jar的.nar文件:

  • find . -name '*.nar':遍历当前目录及所有子目录,找出所有后缀为.nar的文件(NAR是和JAR类似的Java生态打包格式)
  • while read NARFILE:把找到的每个.nar文件路径逐个传给变量NARFILE,依次检查
  • jar tvf $NARFILE | grep -q jackson-databind:用jar tvf列出当前.nar文件内的所有条目,通过grep -q静默检查是否包含jackson-databind相关文件(-q只返回匹配状态,不输出内容)
  • 如果检查到包含,就执行OUTPUT=$(jar tvf $NARFILE | grep jackson-databind):把匹配到的jackson-databind相关条目存入变量OUTPUT,然后输出文件名:匹配条目的格式(比如demo.nar:META-INF/bundled-dependencies/jackson-databind-2.9.10.jar)
  • grep '\-2.9.10.jar':从前面的输出里筛选出带-2.9.10.jar的行,定位到内嵌旧版本Jackson的.nar文件
  • awk -F':' '{print $1}':以冒号为分隔符,提取每行的第一个部分(即.nar文件路径),得到最终需要处理的文件列表

第二阶段:更新.nar文件中的Jackson依赖版本

这部分是对筛选出的.nar文件进行版本升级,把旧的2.9.10版本替换为2.9.10.8:

  • jar uvf $NARFILE META-INF/bundled-dependencies/jackson-databind-2.9.10.8.jar:用jar uvf把本地的jackson-databind-2.9.10.8.jar添加到目标.nar文件的指定路径下(u代表更新/添加文件,v显示操作详情,f指定要操作的归档文件)
  • jar xvf $NARFILE META-INF/DEPENDENCIES:从.nar文件里解压出META-INF/DEPENDENCIES文件到当前工作目录(x是解压操作)
  • sed -i '/jackson-databind/s/2.9.10$/2.9.10.8/' META-INF/DEPENDENCIES:用sed修改解压后的DEPENDENCIES文件——找到包含jackson-databind的行,把行尾的2.9.10替换成2.9.10.8(-i表示直接修改文件内容,无需临时文件)
  • jar uvf $NARFILE META-INF/DEPENDENCIES:把修改后的DEPENDENCIES文件重新添加回.nar文件,覆盖原文件
  • zip -d $NARFILE META-INF/bundled-dependencies/jackson-databind-2.9.10.jar:因为.nar本质是ZIP格式,用zip命令删除文件里旧版本的jackson-databind-2.9.10.jar(-d是删除归档内指定文件的参数)

内容的提问来源于stack exchange,提问作者Mandroid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 18:35:41