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

shell脚本中如何在if语句内跳过当前文件并处理同目录下的下一个文件

调整后的Shell脚本实现方案
# 替换为你实际的文件目录路径
test_path="/target/dir/*"
# 初始化数组存储处理失败的文件名
failed_files=()

for test_file in $test_path
do
    # 跳过非普通文件(目录、软链接等),避免逻辑异常
    if [ ! -f "$test_file" ]; then
        continue
    fi

    # 用子shell包裹文件处理逻辑,统一捕获错误
    (
        # 原有空文件判断逻辑,保留
        if [ ! -s "$test_file" ]; then
            echo "$test_file 为空文件,处理失败"
            exit 1
        fi

        # 你原有其他的文件处理代码写在这里
        # 只要处理逻辑返回非0状态码,都会判定为处理失败
        echo "正在处理 $test_file"
    )

    # 捕获子shell执行结果,非0代表处理出错
    if [ $? -ne 0 ]; then
        # 记录失败文件名
        failed_files+=("$test_file")
        # 跳过当前文件,直接处理下一个
        continue
    fi
done

# 所有文件处理完成后,存在失败文件就触发邮件通知
if [ ${#failed_files[@]} -gt 0 ]; then
    echo "本次处理失败的文件列表:${failed_files[*]}" | mail -s "文件处理失败告警" 你的邮箱地址@xxx.com
fi
  • 所有变量加了双引号包裹,避免文件名带空格时脚本执行异常
  • 新增普通文件校验逻辑,排除目录、软链接等非目标处理对象
  • 用子shell包裹所有处理逻辑,不管是空文件判断还是后续业务逻辑出错,都能统一捕获
  • 失败文件名统一存在数组中,所有文件处理完成后一次性发邮件,避免重复发送多封告警
  • 处理失败后自动执行continue跳过当前文件,不会中断后续文件的处理流程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:36:07