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

Shell脚本进入子目录生成对应Zip文件的错误排查与修正

问题分析与脚本修正

错误原因

当前脚本的核心问题是未进入目标子目录就执行打包操作:

  • 循环遍历*/得到子目录路径后,直接在起始目录执行zip -r "${subdir%/}.zip" .,这里的.代表起始目录的全部内容,导致打包了整个起始目录下的所有文件和子目录,而非目标子目录的内容。

修正后的脚本

#!/bin/bash

startdir=(  
  "/workspace/input/data"
)

for dir in "${startdir[@]}"; do
  # 进入起始目录,失败则跳过
  cd "$dir" || continue
  # 遍历所有子目录
  for subdir in */; do
    # 去掉路径末尾的斜杠,得到子目录名
    subdir_name="${subdir%/}"
    # 进入子目录,失败则跳过该子目录
    if cd "$subdir"; then
      # 打包当前子目录内的所有内容,生成以子目录命名的zip文件
      zip -r "${subdir_name}.zip" .
      # 返回起始目录,继续处理下一个子目录
      cd ..
    fi
  done
done

关键修正点说明

  • 新增cd "$subdir"进入目标子目录,确保打包操作的上下文是子目录内部
  • 加入cd ..返回起始目录,保证后续循环能正确遍历下一个子目录
  • 增加if cd "$subdir"判断,避免因子目录不存在或权限问题导致脚本异常

执行效果验证

修正后执行脚本,每个子目录(如A、B、C、D)内会生成对应的A.zip、B.zip等文件,zip包内仅包含该子目录自身的内容,不会包含其他子目录的文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 14:14:59