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

Shell脚本压缩时去除完整路径,仅保留data目录结构

问题解决与脚本修改

核心问题原因

你当前的脚本使用绝对路径作为zip命令的输入参数,导致压缩包中包含了完整的系统路径(/root/Archive/EKS/data/xxx),因此解压时会重建整个路径层级,出现路径重复的问题。

针对需求的修改方案

根据你“压缩整个data目录,压缩包保存在data目录下”的需求,修改后的脚本如下:

# 定义目标目录路径
target_dir="/root/Archive/EKS/data"

# 切换到data目录的上级目录(/root/Archive/EKS),切换失败则终止脚本
cd "$(dirname "$target_dir")" || exit 1

# 递归压缩data目录,将压缩包保存到data目录下
zip -r "./data/data.zip" "data"

如果你的实际需求是压缩data目录下的每个子目录(每个子目录单独生成zip包),则使用以下脚本:

startdir="/root/Archive/EKS/data"

# 切换到data目录,切换失败则终止脚本
cd "$startdir" || exit 1

# 遍历data目录下的所有子目录
for sub_dir in */ ; do
    # 递归压缩子目录,生成与子目录同名的zip包(如子目录test生成test.zip)
    zip -r "${sub_dir%/}.zip" "$sub_dir"
done

关键修改点说明

  1. 切换工作目录:通过cd命令切换到目标目录的上级(或目标目录本身),让zip命令使用相对路径处理文件/目录,避免打包绝对路径。
  2. 递归压缩参数-r:原脚本未添加-r,会仅压缩目录本身而不包含内部文件,添加-r才能递归压缩目录内所有内容。
  3. 错误处理:|| exit 1确保在目录切换失败时终止脚本,防止后续执行错误操作。

验证效果

修改后生成的压缩包,解压后只会得到data目录(或对应子目录)及其内部的文件结构,不会出现/root/Archive/EKS/data这样的完整路径层级。

内容的提问来源于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 19:22:21