#!/bin/bash
# 目录打包脚本
# 功能:按指定目录列表打包一级目录下对应子目录为gz压缩包,命名格式:目录名+年月日+4位随机数
# 适配场景:需要打包的目录直接编辑下方TARGET_DIRS数组即可,无需修改其他逻辑
# -------------------- 配置参数 --------------------
BASE_DIR="/opt/test_1" # 一级源目录路径
PKG_DIR="${BASE_DIR}/app-resources/packages" # 压缩包输出目录路径
# 手动指定需要打包的目录列表(按格式填写目录名,可自由增删)
TARGET_DIRS=(
"prompt_v2.0"
"todo-v2"
)
# -------------------- 基础校验 --------------------
# 检查源目录是否存在
if [ ! -d "$BASE_DIR" ]; then
echo "[错误] 源目录 ${BASE_DIR} 不存在,请检查路径配置"
exit 1
fi
# 自动创建压缩包输出目录(若不存在)
mkdir -p "$PKG_DIR"
if [ $? -ne 0 ]; then
echo "[错误] 无法创建输出目录 ${PKG_DIR},请检查权限"
exit 1
fi
# -------------------- 打包逻辑 --------------------
current_date=$(date +%Y%m%d) # 获取当前年月日(如20260723)
count=0 # 打包成功计数器
# 遍历指定目录列表
for dir_name in "${TARGET_DIRS[@]}"; do
dir_path="${BASE_DIR}/${dir_name}"
# 校验当前目录是否存在
if [ ! -d "$dir_path" ]; then
echo "[警告] 目录 ${dir_path} 不存在,跳过该条目"
continue
fi
# 生成4位随机数(自动补零,范围0001~9999)
random_num=$(printf "%04d" $(($RANDOM % 10000)))
# 构造压缩包文件名
pkg_name="${dir_name}_${current_date}_${random_num}.tar.gz"
# 执行打包操作
tar -czf "${PKG_DIR}/${pkg_name}" -C "$BASE_DIR" "$dir_name"
if [ $? -eq 0 ]; then
echo "[成功] 已生成压缩包:${PKG_DIR}/${pkg_name}"
count=$((count + 1))
else
echo "[失败] 目录 ${dir_name} 打包失败,请检查权限或文件完整性"
fi
done
# -------------------- 结果输出 --------------------
echo "========================================"
echo "本次打包完成,共成功打包 ${count} 个目录"
echo "压缩包存放路径:${PKG_DIR}"
echo "========================================"
linux下指定根目录,目录 打包到执指定目录下
于 2026-07-23 11:52:58 首次发布
6868

被折叠的 条评论
为什么被折叠?



