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

Shell循环脚本关联不同扩展名输入文件报错的排查与解决

Shell循环关联文件报错的解决方法

问题场景

编写Shell for循环遍历assemblies/目录下的.fastq文件,尝试关联对应名称的_assembly.fasta文件运行minimap2时,报错「找不到文件或文件夹」,具体提示无法打开hour01_assembly.fasta(该文件实际存在于目标目录中)。使用ShellCheck检测原代码未发现问题。

原报错代码

for file1 in assemblies/*.fastq; do
   basename=${file1%.fastq}
   file2="$basename"_assembly.fasta
   minimap2 -ax map-ont "$file2" "$file1"  > "$basename"_aln.sam
done

解决后的代码

#!/usr/bin/bash

#set -x

for file1 in assemblies/*.fastq; do
   basename="${file1%.fastq}"
   basename="${basename##*/}"
   file2=assemblies/"$basename"_assembly.fasta
   [ $file2 ] || continue
   echo "f1=$file1", "f2=$file2"
   minimap2 -ax map-ont "$file2" "$file1"  > "$basename"_aln.sam
done

问题原因与修改说明

  1. 原代码问题:basename=${file1%.fastq}得到的是包含完整目录路径的字符串(例如assemblies/hour01),直接拼接后file2的路径逻辑错误,无法正确指向目标.fasta文件。
  2. 关键修改点:
    • 新增basename="${basename##*/}":剥离目录路径,只保留纯文件名(如hour01)。
    • 显式构建file2的完整路径assemblies/"$basename"_assembly.fasta,确保指向正确的文件位置。
    • 添加[ $file2 ] || continue:跳过变量为空的情况,避免无效执行。
    • 增加echo语句用于调试,直观确认文件路径是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 19:25:26