mirror of
https://gitee.com/ShopeX/ECShopX
synced 2026-08-05 03:35:50 +08:00
更新发布脚本
This commit is contained in:
115
dev-setup.sh
115
dev-setup.sh
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user