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

检测目录下.fastq文件的Bash脚本报错 求正确实现方案

错误原因
  • 核心问题:原脚本中包裹find命令的是全角引号´而非Bash可识别的反引号`,导致find命令没有实际执行,数组内存储的是命令字符串本身,长度永远大于0,所以无论目录内是否存在.fastq文件都会误判为存在。
  • 兼容性问题:用$(ls -d */)遍历目录、直接将命令输出赋值给数组的写法,不兼容带空格、特殊字符的目录/文件名,容易出现拆分异常。
  • 安全隐患:频繁cd进出目录如果遇到cd失败的情况,后续操作会在错误路径执行,存在风险。
优化实现方案

推荐用Bash内置的glob匹配实现,不需要调用外部命令,逻辑更简单稳定:

#!/bin/bash
shopt -s nullglob  # 匹配不到文件时返回空数组,而非返回匹配字符串本身

echo "Beginning operation"
echo

# 遍历当前路径下所有子目录
for folder in */; do
    # 去掉目录末尾的斜杠
    myfolder="${folder%/}"
    echo
    echo "Entered $myfolder"

    # 直接匹配对应目录下的.fastq文件存入数组
    fastq_files=("$myfolder"/*.fastq)
    
    if [ ${#fastq_files[@]} -gt 0 ]; then
        echo "There are FASTQ files, will not do the operation"
    else
        echo "There are no FASTQ files, proceeding with operation"
        # 你的业务操作写在此处,操作目标目录直接使用$myfolder变量即可,无需cd进入目录
    fi

    echo "Exited $myfolder"
    echo 
done

echo "Ended Operation"

如果确实需要使用find实现(比如后续要扩展为深层目录检测),可以用以下更稳妥的计数方式,兼容所有特殊文件名:

# 统计指定目录下一级的.fastq文件数量
fastq_count=$(find "$myfolder" -maxdepth 1 -type f -name "*.fastq" -printf '.' | wc -c)
if [ "$fastq_count" -gt 0 ]; then
    # 存在.fastq文件的逻辑
fi

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:24:03