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

请求修正查找目录中*.txt文件的Shell脚本

脚本修正方案

原脚本存在多处关键问题,以下是问题分析及修正后的版本:

问题梳理

  • 变量赋值错误:extension = .txt中赋值符号=两侧不能有空格,Shell会将extension识别为命令,直接导致脚本报错。
  • 路径拼接逻辑错误:for file in /tmp/test12072022/*循环里,$file已经是完整文件路径(比如/tmp/test12072022/doc),后续拼接/tmp/test12072022/$file$extension会生成重复路径(比如/tmp/test12072022//tmp/test12072022/doc.txt),完全不符合预期。
  • 需求匹配偏差:原脚本是遍历目录下所有文件,再检查每个文件对应的.txt后缀文件是否存在,而非直接检测目标目录中是否有.txt文件。

修正后的脚本(直接检测目录中是否存在txt文件)

#!/bin/bash
target_dir="/tmp/test12072022"

# 先检查目标目录是否存在
if [ ! -d "$target_dir" ]; then
    echo "目标目录不存在"
    exit 1
fi

# 启用nullglob选项:当通配符无匹配时返回空,避免输出"*.txt"字符串本身
shopt -s nullglob
txt_files=("$target_dir"/*.txt)

if [ ${#txt_files[@]} -gt 0 ]; then
    echo "目录中存在.txt文件:"
    for file in "${txt_files[@]}"; do
        echo " - $file"
    done
else
    echo "目录中不存在.txt文件"
fi

简化遍历版(逐个判断文件是否为txt格式)

如果需要遍历目录并逐个验证文件类型,可使用此版本:

#!/bin/bash
target_dir="/tmp/test12072022"

if [ ! -d "$target_dir" ]; then
    echo "目标目录不存在"
    exit 1
fi

echo "目录下的.txt文件:"
for file in "$target_dir"/*.txt; do
    # 处理无匹配文件的情况
    if [ -e "$file" ]; then
        echo " - $file"
    else
        echo "未找到.txt文件"
    fi
    break  # 只需确认存在性,找到第一个匹配项即可退出循环
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 06:16:19