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

如何用Bash脚本从日志文件中找出7天未使用的API

找出过去7天未被调用的API脚本修复

需求说明

  • 读取api.txt中的全部API列表
  • 遍历指定文件夹内的7天日志文件
  • 输出所有日志文件中均未出现的API

原脚本的问题

  • 条件判断逻辑错误:if [[ ! $line == *$i* ]];的写法无法正确筛选出未被调用的API,实际逻辑与预期相反
  • 仅支持单个日志文件,未实现遍历文件夹内所有日志的功能

修复后的完整脚本

#!/bin/bash

api_list="api.txt"
log_dir="./7days_logs"  # 替换为你的日志文件夹路径

# 检查文件和文件夹是否存在
if [ ! -f "$api_list" ]; then
    echo "错误:API列表文件 $api_list 不存在"
    exit 1
fi

if [ ! -d "$log_dir" ]; then
    echo "错误:日志文件夹 $log_dir 不存在"
    exit 1
fi

# 读取所有API到数组
readarray -t apis < "$api_list"

# 逐个检查每个API
for api in "${apis[@]}"; do
    # 默认标记为未被调用
    called=0
    # 遍历文件夹内所有日志文件
    for log_file in "$log_dir"/*.log; do
        # 跳过不存在的文件(比如没有.log后缀的文件)
        [ -f "$log_file" ] || continue
        # 快速检查日志中是否存在该API
        if grep -q "$api" "$log_file"; then
            called=1
            break  # 只要一个日志存在,就停止检查后续日志
        fi
    done
    # 若所有日志都未找到该API,输出
    if [ $called -eq 0 ]; then
        echo "$api"
    fi
done

修复要点说明

  1. 修正逻辑判断:改为先假设API未被调用(called=0),只要在任意日志中通过grep -q检测到API存在,就标记为已调用并终止该API的后续日志检查,避免无效遍历
  2. 实现日志文件夹遍历:通过for log_file in "$log_dir"/*.log遍历文件夹内所有.log后缀的日志文件,同时增加文件存在判断避免报错
  3. 优化效率:使用grep -q替代逐行读取日志,-q参数会在找到匹配后立即退出,大幅提升检查速度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 05:20:51