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

Bash Shell脚本无法创建指定子文件夹问题求助

问题分析与修复方案

你的脚本存在几个关键错误,导致创建文件夹的逻辑未执行,以下是具体问题和修复方案:

核心错误点

  • 函数未调用:脚本仅定义了RUN_WORKERS函数,但没有触发调用,函数内的代码完全没执行。
  • 循环条件错误:for((i=0;i<$RGB_PATH_LIST;i++))中,$RGB_PATH_LIST只会取数组第一个元素的值,正确的数组长度应该用${#RGB_PATH_LIST[@]}。
  • 数组输出错误:echo "$RGB_PATH_LIST"只能打印数组第一个元素,要输出所有元素需用echo "${RGB_PATH_LIST[@]}"。
  • 无意义的NULL判断:遍历目录生成的数组元素不会是"NULL",反而应该检查条目是否为目录(避免处理非目录文件)。
  • 删除循环范围错误:用固定的WORKER_CNT=4循环删除,会和实际数组长度不匹配,应该沿用数组长度循环。

修复后的完整脚本

#!/bin/bash
MKDIR(){
    if [ ! -d "$1" ]; then
        mkdir -p "$1"
    fi
}
WORKER_CNT=4
dirs=/home/sysadmin/Nyan/cv_samples_v1.3.0/action_recognition_net/data/selfinf
declare -a RGB_PATH_LIST
i=0
for entry in "$dirs"/*
do
  # 仅将目录加入数组,避免处理非目录文件
  if [ -d "$entry" ]; then
    RGB_PATH_LIST[i++]="$entry"
  fi
done

RUN_WORKERS(){
    echo "处理的目录列表:${RGB_PATH_LIST[@]}"
    # 循环遍历数组所有元素
    for((i=0;i<${#RGB_PATH_LIST[@]};i++)); do
        current_dir="${RGB_PATH_LIST[i]}"
        mkdir -p "${current_dir}/flow"
        mkdir -p "${current_dir}/of"
        # 后台执行处理命令
        ./AppOFCuda --input="${current_dir}/rgb/*.png" --output="${current_dir}/flow" --preset=fast --gridSize=1 \
        && python ./convert_of.py --input_flow_folder "${current_dir}/flow" --output_folder "${current_dir}/of" &
    done
    wait
    # 删除所有处理过的flow文件夹
    for((i=0;i<${#RGB_PATH_LIST[@]};i++)); do
        current_dir="${RGB_PATH_LIST[i]}"
        if [ -d "${current_dir}/flow" ]; then
            rm -r "${current_dir}/flow"
        fi
    done
}

# 调用RUN_WORKERS函数执行逻辑
RUN_WORKERS

额外优化说明

  • 给变量加上双引号,避免路径包含空格时出现解析错误。
  • 遍历目录时增加目录判断,只将有效目录加入数组,防止处理非目录文件。
  • 删除文件夹前先检查是否存在,避免出现"无此文件或目录"的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:27:52