Shell脚本按优先级匹配txt文件名写入目标文件问题
问题根因
原有代码逻辑完全不符合需求:
- 没有做文件存在性校验,直接输出通配符字符串,根本没有实际检索目录下的文件
- 匹配
alert_human_*.txt规则时没有做排除逻辑,通配符范围天然包含alert_human_abc_*.txt格式的文件,必然出现误识别
可直接使用的实现代码
脚本存放路径为human/stg,直接在该目录下创建脚本写入以下内容即可:
#!/bin/bash # 目标输出文件路径 TARGET="../temp/availablefiles.txt" # 先清空目标文件内容 > "$TARGET" # 按优先级先匹配alert_human_abc_*.txt类文件 abc_match=(alert_human_abc_*.txt) # 校验是否存在真实匹配的文件(规避通配符无匹配时返回原字符串的问题) if [ -f "${abc_match[0]}" ]; then printf "%s\n" "${abc_match[@]}" > "$TARGET" else # 无abc类文件时,匹配普通规则,手动排除abc类文件避免误判 for f in alert_human_*.txt; do [ -f "$f" ] || continue if [[ "$f" != alert_human_abc_*.txt ]]; then echo "$f" >> "$TARGET" fi done fi
逻辑说明
- 优先级严格符合要求:只要目录下存在
alert_human_abc_*.txt格式文件,就只会写入该类文件名,不会处理普通格式文件 - 普通规则匹配时增加了过滤逻辑,所有带
abc_段的同前缀文件都会被跳过,不会出现误识别 - 兼容无匹配文件的场景:如果两类文件都不存在,会生成空的
availablefiles.txt,不会把通配符字符串写入文件
内容的提问来源于stack exchange,提问作者Jayashree
相关产品推荐
相关产品推荐

