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

优化Bash脚本:按单词字符层级查找文件并执行grep(支持50级目录)

优化Bash脚本实现最多50级目录查找并执行grep

需求回顾

需要改写现有query.sh脚本,实现以下目标:

  • 支持最多50级子目录查找,替代原有的嵌套IF结构
  • 按规则构建路径:每一级目录/文件名对应搜索字符串的第n个小写字母(如搜索"LARGE_NAME",第一级为l,第二级为a,以此类推)
  • 找到无后续子文件夹的目标文件后,执行grep -ai "^$1"命令
  • 文件夹与文件名均为单个小写字母,文件无扩展名

改写后的脚本

#!/opt/homebrew/bin/bash
# 获取脚本所在目录的绝对路径
dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)

# 检查输入参数是否为空
if [ $# -eq 0 ]; then
    echo "用法: $0 <搜索字符串>"
    exit 1
fi

# 将输入字符串转为小写,截取前50个字符(限制最多50级)
search_str_lower="${1,,}"
max_levels=50
search_str_lower="${search_str_lower:0:$max_levels}"

current_path="$dir"
str_length=${#search_str_lower}

# 循环构建路径,逐层级检查
for ((i=0; i<str_length; i++)); do
    # 获取当前位置的字符
    char="${search_str_lower:i:1}"
    current_path="$current_path/$char"
    
    # 检查当前路径是否是文件
    if [ -f "$current_path" ]; then
        grep -ai "^$1" "$current_path"
        exit 0
    # 如果不是文件也不是目录,终止循环(不存在该路径)
    elif [ ! -d "$current_path" ]; then
        break
    fi
done

# 如果循环结束仍未找到文件,提示
echo "未找到对应路径的目标文件"
exit 1

关键逻辑说明

  • 路径构建:通过循环逐个提取搜索字符串的小写字符,逐步拼接成路径
  • 终止条件:每一级检查当前路径是否为文件,是则执行grep并退出;如果路径不存在(既不是文件也不是目录),直接终止循环
  • 层级限制:通过截取字符串前50个字符,确保最多遍历50级目录
  • 参数校验:增加了输入参数为空的判断,给出用法提示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:41:42