众所周知,CloudFlare pages 官方有个 bug,如果部署数量超过 100 个,将不能通过网页管理面板删除项目,必须手动一个一个删除部署,将部署数量删除到 100 个以内,才能删除项目。好在官方提供了 api 可以批量删除,本文利用 CF 官方 api 批量删除部署,且可自定义保留最新部署的数量。
资源
仓库地址
yutian81/cf-github-script · GitHub,支持作者,点个免费的 star 吧!
代码全文
#!/bin/bash
# 配置变量(请根据需要修改)
API_TOKEN="" # 需要 Pages 和 Workers 的编辑权限
ACCOUNT_ID="" # 你的 Cloudflare 账户 ID
PROJECT_NAME="" # 项目名
# 默认保留最新部署数量(可通过脚本参数覆盖)
KEEP=3
# 如果传入了参数则覆盖默认保留数量
if [[ -n "$1" ]]; then
KEEP=$1
fi
# 检查必要变量是否已设置
if [[ -z "$API_TOKEN" || -z "$ACCOUNT_ID" || -z "$PROJECT_NAME" ]]; then
echo "❌ 错误:请先设置 API_TOKEN, ACCOUNT_ID 和 PROJECT_NAME"
exit 1
fi
# 存储所有部署 ID 的数组
all_deployments=()
# 页码初始值
page=1
per_page=20
echo "⏳ 正在获取所有部署记录..."
# 遍历所有页面
while true; do
response=$(curl -s -H "Authorization: Bearer $API_TOKEN" \
"https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/pages/projects/$PROJECT_NAME/deployments?page=$page&per_page=$per_page")
deployments=$(echo "$response" | jq '.result')
count=$(echo "$deployments" | jq 'length')
if [ "$count" -eq 0 ]; then
break
fi
ids=$(echo "$deployments" | jq -r '.[].id')
all_deployments+=($ids)
((page++))
done
total=${#all_deployments[@]}
echo "📦 共获取到 $total 个部署。"
# 排序并获取要保留的最新 N 个
keep_ids=$(printf "%s\n" "${all_deployments[@]}" | tac | head -n "$KEEP")
delete_ids=$(printf "%s\n" "${all_deployments[@]}" | grep -vxFf <(echo "$keep_ids"))
if [[ -z "$delete_ids" ]]; then
echo "✅ 无需删除部署,已满足保留数量 $KEEP。"
exit 0
fi
echo "🚮 将删除以下部署(保留最近 $KEEP 个):"
echo "$delete_ids"
# 删除旧部署
for id in $delete_ids; do
echo "🗑️ 正在删除部署 ID: $id"
curl -s -X DELETE -H "Authorization: Bearer $API_TOKEN" \
"https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/pages/projects/$PROJECT_NAME/deployments/$id" | jq
done
echo "✅ 所有旧部署已删除完成。"
使用方法
此处只说 windows 环境,linux 也是同样道理
安装工具
安装 windows 版 git bash 和 jq。方法略过,自行安装,并配置好 windows 系统环境变量
执行代码
将上面的代码保存为
del-pages.sh
文件,在脚本文件同级目录点击鼠标右键,打开git bash
终端运行
bash del-pages.sh
,将默认保留最新的3
个部署,删除其他旧部署运行
bash del-pages.sh 5
,将默认保留最新的5
个部署,删除其他旧部署,数字可自行修改
评论区