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

如何用UNIX Shell脚本拆分大文件夹为多份Zip并保留解压目录结构?

UNIX Shell 实现大目录分卷Zip压缩并保留目录结构

方案一:使用Zip原生分卷功能(推荐)

大部分现代UNIX系统的Info-ZIP工具支持分卷压缩,直接通过-s参数指定分卷大小,解压时自动识别分卷并完整保留原目录结构。

实现脚本

#!/bin/bash

# 配置参数
SOURCE_DIR="/path/to/your/target-directory"  # 替换为要压缩的根目录路径
OUTPUT_PREFIX="my-archive"                   # 压缩包文件名前缀
VOLUME_SIZE="10g"                           # 单个分卷大小,支持k(KB)/m(MB)/g(GB)
OUTPUT_DIR="./compressed-archives"          # 压缩包输出目录

# 创建输出目录(如果不存在)
mkdir -p "$OUTPUT_DIR"

# 切换到源目录的上级目录,用相对路径压缩避免绝对路径风险
cd "$(dirname "$SOURCE_DIR")" || exit 1

# 执行分卷压缩,递归包含子目录并保留结构
zip -r -s "$VOLUME_SIZE" "${OUTPUT_DIR}/${OUTPUT_PREFIX}.zip" "$(basename "$SOURCE_DIR")"

参数说明

  • -r:递归压缩子目录及所有文件
  • -s:指定分卷大小,单位支持k/m/g(小写)
  • 相对路径压缩:避免压缩包中包含绝对路径,防止解压时意外覆盖系统文件

解压方法

将所有分卷文件(my-archive.zip、my-archive.z01、my-archive.z02...)放在同一目录,执行以下命令即可自动合并并按原结构解压:

unzip my-archive.zip

方案二:兼容旧版Zip(无-s参数)

如果系统的Zip工具不支持分卷参数,可通过tar先打包为单文件,再用split分卷,最后将分卷打包为Zip(可选)。

实现脚本

#!/bin/bash

SOURCE_DIR="/path/to/your/target-directory"
OUTPUT_PREFIX="my-archive"
VOLUME_SIZE="10G"  # split的单位支持K/M/G(大写)
OUTPUT_DIR="./compressed-archives"

mkdir -p "$OUTPUT_DIR"

# 用tar打包并压缩(保留目录结构),再split分卷
tar -czf - "$SOURCE_DIR" | split -b "$VOLUME_SIZE" - "${OUTPUT_DIR}/${OUTPUT_PREFIX}.tar.gz.part-"

# 可选:将每个分卷打包为Zip(方便传输)
for part in "${OUTPUT_DIR}/${OUTPUT_PREFIX}.tar.gz.part-"*; do
    zip "${part}.zip" "$part"
    rm "$part"  # 打包后删除原分卷文件
done

解压方法

  1. (若转成了Zip分卷)先解压所有Zip分卷得到tar.gz分卷:
for zip_file in "${OUTPUT_PREFIX}.tar.gz.part-"*.zip; do
    unzip "$zip_file"
done
  1. 合并tar.gz分卷并解压:
cat "${OUTPUT_PREFIX}.tar.gz.part-"* | tar -xzf -

关键注意事项

  • 权限:确保脚本对源目录有读取权限,对输出目录有写入权限
  • 磁盘空间:输出目录需预留不小于源目录总大小的空间(压缩后实际占用会更小)
  • 完整性验证:压缩完成后,用unzip -t my-archive.zip(方案一)或cat *.part-* | tar -tzf -(方案二)验证包的完整性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 09:15:17