更新发布脚本

This commit is contained in:
wanghai
2026-02-06 23:34:51 +08:00
parent 5ae4c9442e
commit 86c2d549e2

View File

@@ -601,35 +601,102 @@ configure_env() {
cleanup_empty_directories() {
log_info "检查并清理因容器卷映射产生的空目录..."
# 检查管理后台目录
ADMIN_DIR="$PARENT_DIR/ECShopX_admin-frontend"
if [ -d "$ADMIN_DIR" ] && [ ! -f "$ADMIN_DIR/package.json" ]; then
# 检查目录是否为空或只包含容器创建的基础文件
local file_count=$(find "$ADMIN_DIR" -mindepth 1 -maxdepth 1 2>/dev/null | wc -l | tr -d ' ')
if [ "$file_count" -eq 0 ] || [ "$file_count" -le 2 ]; then
log_info "删除因容器卷映射产生的空目录: $ADMIN_DIR"
rm -rf "$ADMIN_DIR"
local cleaned_count=0
local failed_dirs=()
# 删除空目录的辅助函数
remove_empty_dir() {
local dir=$1
local dir_name=$2
local container_path=""
# 确定容器内的路径
if [ "$dir_name" = "ECShopX_admin-frontend" ]; then
container_path="/data/httpd/ECShopX_admin-frontend"
elif [ "$dir_name" = "ECShopX_mobile-frontend" ]; then
container_path="/data/httpd/ECShopX_mobile-frontend"
elif [ "$dir_name" = "ECShopX_desktop-frontend" ]; then
container_path="/data/httpd/ECShopX_desktop-frontend"
fi
fi
if [ -d "$dir" ] && [ ! -f "$dir/package.json" ]; then
# 检查目录是否为空或只包含容器创建的基础文件
local file_count=$(find "$dir" -mindepth 1 -maxdepth 1 2>/dev/null | wc -l | tr -d ' ')
if [ "$file_count" -eq 0 ] || [ "$file_count" -le 2 ]; then
# 先尝试直接删除
if rm -rf "$dir" 2>/dev/null; then
log_success "已清理空目录: $dir_name"
cleaned_count=$((cleaned_count + 1))
return 0
fi
# 如果删除失败,尝试修改权限后再删除
if chmod -R u+w "$dir" 2>/dev/null && rm -rf "$dir" 2>/dev/null; then
log_success "已清理空目录: $dir_name"
cleaned_count=$((cleaned_count + 1))
return 0
fi
# 如果容器正在运行,尝试通过容器删除(容器有挂载权限)
if is_container_running && [ -n "$container_path" ]; then
if docker exec "$CONTAINER_NAME" sh -c "rm -rf $container_path" 2>/dev/null; then
# 等待一下,让文件系统同步
sleep 1
# 再次尝试删除主机目录
if rm -rf "$dir" 2>/dev/null; then
log_success "已清理空目录: $dir_name"
cleaned_count=$((cleaned_count + 1))
return 0
fi
fi
fi
# 如果还是失败,尝试修改所有者(如果是当前用户创建的)
local current_user=$(whoami)
if chown -R "$current_user" "$dir" 2>/dev/null && rm -rf "$dir" 2>/dev/null; then
log_success "已清理空目录: $dir_name"
cleaned_count=$((cleaned_count + 1))
return 0
fi
# 如果还是失败,记录失败的目录
failed_dirs+=("$dir_name:$dir")
return 1
fi
fi
return 0
}
# 检查管理后台目录
remove_empty_dir "$PARENT_DIR/ECShopX_admin-frontend" "ECShopX_admin-frontend"
# 检查移动商城目录
VSHOP_DIR="$PARENT_DIR/ECShopX_mobile-frontend"
if [ -d "$VSHOP_DIR" ] && [ ! -f "$VSHOP_DIR/package.json" ]; then
local file_count=$(find "$VSHOP_DIR" -mindepth 1 -maxdepth 1 2>/dev/null | wc -l | tr -d ' ')
if [ "$file_count" -eq 0 ] || [ "$file_count" -le 2 ]; then
log_info "删除因容器卷映射产生的空目录: $VSHOP_DIR"
rm -rf "$VSHOP_DIR"
fi
fi
remove_empty_dir "$PARENT_DIR/ECShopX_mobile-frontend" "ECShopX_mobile-frontend"
# 检查PC商城目录
PC_DIR="$PARENT_DIR/ECShopX_desktop-frontend"
if [ -d "$PC_DIR" ] && [ ! -f "$PC_DIR/package.json" ]; then
local file_count=$(find "$PC_DIR" -mindepth 1 -maxdepth 1 2>/dev/null | wc -l | tr -d ' ')
if [ "$file_count" -eq 0 ] || [ "$file_count" -le 2 ]; then
log_info "删除因容器卷映射产生的空目录: $PC_DIR"
rm -rf "$PC_DIR"
fi
remove_empty_dir "$PARENT_DIR/ECShopX_desktop-frontend" "ECShopX_desktop-frontend"
# 汇总结果
if [ $cleaned_count -gt 0 ]; then
log_success "已清理 $cleaned_count 个空目录"
fi
# 如果有失败的目录,统一提示
if [ ${#failed_dirs[@]} -gt 0 ]; then
echo ""
log_warning "以下目录因权限问题无法自动清理:"
for dir_info in "${failed_dirs[@]}"; do
local name="${dir_info%%:*}"
local path="${dir_info#*:}"
echo " - $name: $path"
done
echo ""
log_info "如需手动清理,可使用以下命令:"
for dir_info in "${failed_dirs[@]}"; do
local path="${dir_info#*:}"
echo " sudo rm -rf \"$path\""
done
echo ""
fi
}