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

Bash脚本遍历子目录异常:仅处理首个目录,请求修正

问题分析
  • 数组调用错误:startdir是数组变量,但直接执行cd "$startdir"时,bash只会读取数组的第一个元素,因此仅会切换到/root/Archive/EKS/data,完全未处理第二个路径。
  • 缺少数组遍历逻辑:脚本没有循环遍历数组内的所有路径,自然无法对第二个目录执行压缩操作。
修正后的脚本(方式1:切换目录处理)
#!/bin/bash
startdir=(
"/root/Archive/EKS/data"
"/root/Incoming/data"
)

# 遍历数组中的每个目标路径
for dir in "${startdir[@]}"; do
    # 切换到目标目录,失败则跳过当前路径继续执行
    cd "$dir" || { echo "无法进入目录: $dir"; continue; }
    
    # 压缩当前目录下的所有子目录
    for sub_dir in */ ; do
        zip -r "${sub_dir%/}.zip" "$sub_dir"
    done
done
修正后的脚本(方式2:不切换目录,绝对路径处理,更安全)

这种方式避免频繁切换目录导致的路径混乱,适合批量场景:

#!/bin/bash
startdir=(
"/root/Archive/EKS/data"
"/root/Incoming/data"
)

# 遍历数组中的每个目标路径
for dir in "${startdir[@]}"; do
    # 先检查目录是否存在
    if [ ! -d "$dir" ]; then
        echo "目录不存在: $dir"
        continue
    fi
    
    # 用绝对路径遍历子目录并压缩
    for sub_dir in "$dir"/*/ ; do
        sub_name=$(basename "${sub_dir%/}")
        zip -r "$dir/${sub_name}.zip" "$sub_dir"
    done
done
核心修正点
  • 用for dir in "${startdir[@]}"遍历数组所有元素,确保每个路径都被处理。
  • 替换exit为continue,避免单个路径处理失败导致整个脚本终止,提升鲁棒性。
  • 方式2采用绝对路径操作,无需切换目录,规避路径上下文混乱问题,稳定性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 20:23:10