优化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
相关产品推荐
相关产品推荐

