在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
相关产品推荐
相关产品推荐

