半自动删除GCP下的项目

获取当前项目并保存

# 1. 一键把当前 GCP 账号下的项目导出到 projects 文件
gcloud projects list --format="value(projectId)" > projects

2. (非常重要) 打开 projects 检查并删掉你需要保留的项目

nano projects

3. 新建删除脚本

nano delete.sh


#!/bin/bash

# 获取当前脚本所在目录与项目文件路径
WORK_DIR="$(cd "$(dirname "$0")" && pwd)"
FILENAME="$WORK_DIR/projects"

# 1. 校验文件是否存在
if [ ! -f "$FILENAME" ]; then
    echo "❌ 错误: 未找到 $FILENAME 文件!"
    echo "请先使用 'gcloud projects list --format=\"value(projectId)\" > projects' 生成文件。"
    exit 1
fi

# 2. 读取项目 ID 列表并清理空行与前后空格
projects=()
while IFS= read -r line || [ -n "$line" ]; do
    # 过滤掉纯空行或只有空格的行
    clean_line=$(echo "$line" | xargs)
    if [ -n "$clean_line" ]; then
        projects+=("$clean_line")
    fi
done < "$FILENAME"

# 3. 校验列表是否为空
if [ ${#projects[@]} -eq 0 ]; then
    echo "⚠️ 警告: $FILENAME 文件为空,没有可删除的项目。"
    exit 0
fi

# 4. 安全确认提示(展示即将删除的项目)
echo "=================================================="
echo "⚠️  注意!即将在当前 Google Cloud 账号中删除以下 ${#projects[@]} 个项目:"
echo "=================================================="
for proj in "${projects[@]}"; do
    echo "  - $proj"
done
echo "=================================================="
read -p "确认全部彻底删除?(输入 y 继续,其他任意键取消): " confirm

if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then
    echo "❌ 操作已取消。"
    exit 0
fi

# 5. 逐个进行后台并发删除
echo -e "\n🚀 开始提交删除任务...\n"

for proj in "${projects[@]}"; do
    echo "正在提交删除任务: $proj"
    # --quiet 参数实现免交互自动确认,不再需要 setsid 和 yes 文件
    gcloud projects delete "$proj" --quiet &
    sleep 1
done

# 6. 等待所有后台任务结束
echo -e "\n⏳ 等待所有 GCP 响应删除指令..."
wait

echo -e "\n✅ 所有项目的删除请求已提交完毕!"

4. 赋予执行权限并运行删除脚本

chmod +x delete.sh
./delete.sh