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

使用Shell遍历子目录执行操作时无法匹配R1.fastq文件问题求助

Shell脚本未匹配到R1.fastq文件的原因分析
  • 条件判断逻辑错误:你脚本中if [ -d "${i}" ]里的-d参数作用是判断指定路径是否为目录,但你要处理的是后缀为R1.fastq的普通文件,就算匹配到了符合命名规则的文件,这个判断也会返回假,直接跳过后续执行逻辑。如果要判断目标为普通文件,应该把-d改为-f。
  • 通配符匹配范围有限:你使用的./*/*R1.fastq只能匹配当前目录下一级子目录里的目标文件,如果你的R1.fastq文件存放在二级及更深的子目录中,这个通配符规则无法匹配到对应文件。如果需要递归匹配所有层级子目录,可开启bash的globstar选项后使用./**/*R1.fastq匹配,或者直接使用find命令检索文件。
  • 未开启nullglob选项导致空匹配无反馈:bash默认配置下如果通配符没有匹配到任何文件,会把通配符字符串本身(也就是./*/*R1.fastq这个字符串)赋值给循环变量i,此时判断该字符串对应路径是否为目录必然返回假,也不会有任何执行输出。你可以在脚本开头添加shopt -s nullglob,让通配符匹配不到文件时直接展开为空,循环就不会执行。

以下是修正后的参考脚本:

# 开启nullglob避免空匹配问题
shopt -s nullglob
# 如果需要递归所有子目录,可取消注释以下两行开启globstar,替换循环的匹配规则
# shopt -s globstar
# for i in ./**/*R1.fastq;
for i in ./*/*R1.fastq;
do
    # 改为判断是普通文件
    if [ -f "${i}" ]; then
        echo "${i}" 
        # 变量加引号避免文件名含空格时报错
        python2.7 demultadapt.py -f "$i" -p Demul-01-R1 FILE_ADAPT
    fi
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:54:04