如何用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
修复要点说明
- 修正逻辑判断:改为先假设API未被调用(
called=0),只要在任意日志中通过grep -q检测到API存在,就标记为已调用并终止该API的后续日志检查,避免无效遍历 - 实现日志文件夹遍历:通过
for log_file in "$log_dir"/*.log遍历文件夹内所有.log后缀的日志文件,同时增加文件存在判断避免报错 - 优化效率:使用
grep -q替代逐行读取日志,-q参数会在找到匹配后立即退出,大幅提升检查速度
内容的提问来源于stack exchange,提问作者gogo3152
相关产品推荐
相关产品推荐

