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

