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

如何用Shell脚本结合FreeSurfer批量将MGZ文件转换为NII文件?

MGZ转NII自动化脚本错误修复

错误原因分析

  1. 通配符未正确展开:原脚本中for FILE in "${fp}/*"的双引号会阻止shell解析*通配符,导致循环仅处理${fp}/*这个字符串(而非文件夹内的实际文件),后续路径处理全部失效。
  2. 路径重复拼接:filepath=$fp$FILE中$FILE已经包含$fp前缀,重复拼接会生成/path/path/*这类无效路径,使得basename无法正确提取文件名,最终输出参数异常,触发mri_convert: missing output volume name错误。
  3. 未过滤目标文件:脚本会遍历文件夹内所有文件,包括非MGZ格式文件,无意义且可能引发额外错误。

修正后的脚本

#!/bin/bash 

# 询问目标文件夹路径
read -p "Enter filepath: " fp 

# 确认路径
read -p "Continue? You said ${fp} (Y/N): " confirm 
if [[ ! $confirm =~ ^[yY]([eE][sS])?$ ]]; then
    exit 1
fi

# 遍历文件夹内所有文件(正确展开通配符)
for FILE in "$fp"/*
do
    # 跳过目录(只处理文件)
    if [[ -d "$FILE" ]]; then
        continue
    fi

    # 提取文件名与扩展名
    filename_with_ext=$(basename "$FILE")
    filename="${filename_with_ext%.*}"
    extension="${filename_with_ext##*.}"

    # 仅处理MGZ格式文件
    if [[ "$extension" != "mgz" ]]; then
        continue
    fi

    # 生成输出文件路径(与原文件同目录)
    ni_file="${fp}/${filename}.nii"

    # 执行格式转换
    mri_convert "$FILE" "$ni_file"
    echo "Converted: $FILE -> $ni_file"
done

关键修正点说明

  • 移除通配符的双引号:"$fp"/*让shell正确遍历目标文件夹内的所有文件。
  • 跳过目录:增加if [[ -d "$FILE" ]]; then continue; fi避免处理子目录。
  • 过滤MGZ文件:仅对.mgz后缀的文件执行转换,提升效率。
  • 输出文件路径修正:将生成的NII文件保存在原文件夹内(原脚本会输出到当前工作目录)。
  • 增加转换提示:echo语句方便跟踪转换进度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 03:43:15