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

Bash单if语句校验多个文件存在且非空的正则写法求助

问题原因
  • 你使用的${PREFIX}_R[1,2].fastq写法会触发Shell通配符展开,当对应前缀的R1、R2文件同时存在时,该表达式会被展开为两个独立的文件路径,而[(test命令)的-s参数仅支持接收单个文件路径作为参数,多出来的第二个文件名会被识别为非法的二元运算符,因此抛出你遇到的报错。
修复方案

只需要将if判断行修改为分别校验两个文件的状态,用逻辑与&&关联即可,保证只有两个文件都存在且非空时才满足判断条件:

for files in *.bam
do
    PREFIX=${files%%_aln*}
    # 分别校验R1、R2文件均存在且非空
    if [ -s "${PREFIX}_R1.fastq" ] && [ -s "${PREFIX}_R2.fastq" ]
    then
         echo 'Skip'
    else
         # 你原来的业务逻辑
         do something
    fi
done
  • 这里给变量加了双引号,避免文件名包含空格等特殊字符时出现判断异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 00:36:05