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

为Shell脚本添加文件缺失场景下的异常处理

解决ksh脚本文件缺失时的异常处理问题

原脚本在处理不存在的文件时,会因stat命令报错直接终止执行。下面是添加异常处理后的版本,实现文件缺失时记录日志并继续执行后续文件处理:

#!/bin/ksh
..........
while read file
do
    # 检查目标文件是否为存在的普通文件
    if [[ ! -f "${file}" ]]; then
        log_info "文件 ${file} 不存在,跳过处理"
        continue
    fi

    # 安全获取文件修改时间,捕获stat执行错误
    stat_output=$(stat -c %Y "${file}" 2>/dev/null)
    if [[ -z "${stat_output}" ]]; then
        log_info "无法获取文件 ${file} 的修改时间,跳过处理"
        continue
    fi

    upd_date=$(( $(date +%s) - stat_output ))
    file_nm=$(basename "${file}")
    
    # 优化文件占用检查逻辑,避免冗余进程
    if lsof "${file}" >/dev/null 2>&1 || [[ ${upd_date} -lt 60 ]]; then
        log_info "等待文件 ${file} 传输完成/跳过"
    else
        log_info "找到数据文件 ${file}"
    fi
done < "${TEMP}/filepath"
...............

exit 0

关键修改说明

  • 前置文件校验:通过-f判断文件是否为普通文件,不存在则直接记录日志并进入下一次循环,避免后续命令报错。
  • stat命令错误捕获:将stat的错误输出重定向到空设备,同时检查输出内容,若为空说明命令执行失败(比如文件在检查后被删除),同样记录日志并跳过。
  • 语法优化:用$()替代反引号执行子命令,可读性更好且支持嵌套写法。
  • 性能优化:直接调用lsof "${file}"判断文件是否被占用,替代原有的lsof | grep,减少不必要的进程创建,同时避免文件名含特殊字符时的匹配错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 19:10:31