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

在macOS终端中循环执行Python脚本处理指定nii.gz文件

批量处理Nii.gz文件的终端循环解决方案

核心思路

只遍历目标XX.nii.gz文件,提取数字标识符XX,自动关联对应的XX_aparc+aseg.nii.gz文件,避免处理无关文件和子文件夹。

方法一:Bash参数替换实现(推荐)

直接在当前目录下执行,自动跳过关联文件并检查依赖:

# 先确保输出目录存在(如果脚本不自动创建的话)
mkdir -p output_dir

for t_file in *.nii.gz; do
  # 跳过_aparc+aseg后缀的关联文件
  if [[ "$t_file" == *"_aparc+aseg.nii.gz" ]]; then
    continue
  fi
  # 提取数字标识符XX(去掉.nii.gz后缀)
  xx="${t_file%.nii.gz}"
  # 拼接对应的关联文件名
  a_file="${xx}_aparc+aseg.nii.gz"
  # 检查关联文件是否存在,避免执行失败
  if [[ -f "$a_file" ]]; then
    ./pythonscript.sh -s "$xx" -t "$t_file" -a "$a_file" -o output_dir
  else
    echo "警告:未找到对应关联文件 $a_file,跳过处理 $t_file"
  fi
done

方法二:Find命令精准匹配(适合目录有大量无关文件时)

如果目录里有其他非目标格式的.nii.gz文件,用find精准筛选数字开头的文件,且不遍历子文件夹:

mkdir -p output_dir

find . -maxdepth 1 -type f -name "[0-9]*.nii.gz" ! -name "*_aparc+aseg.nii.gz" | while read -r t_file; do
  # 去掉find输出的./前缀,提取XX
  xx="${t_file%.nii.gz}"
  xx="${xx#./}"
  a_file="${xx}_aparc+aseg.nii.gz"
  if [[ -f "$a_file" ]]; then
    ./pythonscript.sh -s "$xx" -t "$t_file" -a "$a_file" -o output_dir
  else
    echo "警告:未找到对应关联文件 $a_file,跳过处理 $t_file"
  fi
done

关键细节说明

  • 所有变量用双引号包裹,避免文件名含空格、特殊字符时出现错误
  • ${t_file%.nii.gz}是Bash参数扩展语法,用于移除文件名后缀
  • -maxdepth 1确保find只处理当前目录,不遍历子文件夹
  • 提前用mkdir -p output_dir创建输出目录,防止脚本因目录不存在报错

内容的提问来源于stack exchange,提问作者Yi-En

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 04:57:22