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

如何让find命令仅返回每个Tomcat路径下首个匹配的RELEASE-NOTES文件

脚本修改方案

修改后的完整代码

#!/bin/sh

set -- "/opt" "/var"  "/usr"
# 存储已处理过的Tomcat根目录,避免重复输出
processed_tomcat=""

for _i in "$@"; do
    find "$_i" -maxdepth 5 -name 'RELEASE-NOTES*' 2>/dev/null | while read -r found_path; do
        # 提取当前文件所属的Tomcat根目录(匹配tomcat开头的顶层目录)
        tomcat_root=$(echo "$found_path" | sed -E 's/^(.+\/tomcat[^\/]*)\/.*/\1/')
        # 校验当前Tomcat根目录是否已经输出过结果
        if echo "$processed_tomcat" | grep -Fq "$tomcat_root"; then
            continue
        fi
        # 输出第一个匹配结果,标记根目录为已处理
        echo "$found_path"
        processed_tomcat="$processed_tomcat $tomcat_root"
    done
done

修改逻辑说明

  • 修复了原脚本中RELEASE-NOTES*未加引号的问题:避免shell在执行find前提前展开当前目录下的同名文件,导致搜索规则失效
  • 新增已处理根目录标记:通过变量记录已经输出过结果的Tomcat根目录,同一根目录下的后续匹配文件会直接跳过
  • 根目录识别逻辑:通过sed正则提取路径中tomcat开头的顶层目录,可兼容tomcat、tomcat7、tomcat10等不同版本的命名规则
  • 遍历顺序适配:find默认按目录层级从上到下遍历,和期望的优先输出webapps/docs下文件的逻辑完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 14:48:03