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

如何在Bash中查找包含esl*.log等特定文件的所在目录

解决方案

基础用法(全系统搜索)

直接使用find命令匹配目标日志文件并提取所属目录,赋值给变量即可:

# 忽略大小写匹配esl*.log/ESL*.log文件,取第一个匹配的目录赋值
AppLogDirectory=$(find / -type f -iname "esl*.log" -exec dirname {} \; | head -n 1)

参数说明:

  • -iname "esl*.log":忽略大小写匹配文件名,兼容ESL.randomValue.log命名格式
  • -exec dirname {} \;:对每个找到的日志文件,提取它的上级目录路径
  • head -n 1:取第一个匹配到的目录,如果存在多套日志目录需要全部匹配,可以删除该参数自行处理返回结果

优化用法(缩小搜索范围,提升速度)

如果日志只会存放在指定的上层目录下,可以把搜索根路径替换为常用目录,避免全系统扫描浪费时间:

# 仅在/var/log、/opt、/var/data三个目录下搜索
AppLogDirectory=$(find /var/log /opt /var/data -type f -iname "esl*.log" -exec dirname {} \; | head -n 1)

进阶用法(同时校验另外两个必要文件)

如果需要确保取到的目录同时存在appinfo.txt和system.txt,可以加一层目录校验逻辑,结果更精准:

AppLogDirectory=$(find /var/log /opt /var/data -type f -iname "esl*.log" -exec dirname {} \; | sort -u | while read dir; do
  # 检查当前目录是否同时存在另外两个目标文件
  if [ -f "$dir/appinfo.txt" ] && [ -f "$dir/system.txt" ]; then
    echo "$dir"
    break
  fi
done)

可用性校验

赋值完成后可以加个非空判断,避免后续命令执行报错:

if [ -z "$AppLogDirectory" ]; then
  echo "未找到符合要求的日志目录"
  exit 1
fi

# 后续正常调用即可
grep -i "Error" "$AppLogDirectory"/esl*.log

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:09:02