You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过GitHub Action删除更新超5天的Git文件/目录

清理GH Pages分支中Git更新超过5天的目录

问题背景

我们使用gh-pages分支托管静态网站,会频繁向该分支提交新内容,且每个功能分支会推送到同一仓库的子目录,导致部分目录内容过时。希望通过GitHub Action删除最后Git更新超过5天的目录。此前尝试使用find /path/to/files* -mtime +5 -exec rm {} ;命令,但系统将克隆日期视为最后修改时间,无法满足需求。已找到能获取文件最后Git更新时间的脚本,但不知道如何通过此列表触发删除操作。

修改后的GitHub Action配置

name: Prune GH Pages branch

on:
  workflow_dispatch:

jobs:
  upload:
    runs-on: ubuntu-latest
    timeout-minutes: 15
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          ref: gh-pages
      - name: Cleanup
        run: |
          # 计算5天前的日期(格式YYYY-MM-DD)
          FIVE_DAYS_AGO=$(date -d "-5 days" +%Y-%m-%d)

          # 遍历所有文件,检查最后Git更新时间并删除过时文件
          git ls-tree -r --name-only HEAD | while read filename; do
            LAST_UPDATED=$(git log -1 --format="%ad" --date="short" -- "$filename")
            # 比较日期字符串,判断文件是否过时
            if [[ "$LAST_UPDATED" < "$FIVE_DAYS_AGO" ]]; then
              echo "Deleting outdated file: $filename"
              rm -f "$filename"
            fi
          done

          # 删除所有空目录(文件删除后可能遗留空目录)
          find . -type d -empty -delete
      - name: Commit & Push
        run: |
          if [ $(git status --porcelain | wc -l) -eq "0" ]; then
            echo "git repo is clean."
          else
            git add -A
            git commit -m "branch cleanup"
            git push
          fi

关键逻辑说明

  • 日期计算:通过date -d "-5 days" +%Y-%m-%d生成5天前的标准日期字符串,和Git日志输出的短日期格式保持一致,直接用字符串比较即可判断是否过时。
  • 文件遍历与删除:遍历仓库中所有被Git追踪的文件,获取每个文件最后一次提交的日期,若早于5天前则删除该文件。
  • 空目录清理:添加find . -type d -empty -delete命令,自动清理文件删除后遗留的空目录,保持分支结构整洁。

内容的提问来源于stack exchange,提问作者Steffen Schmitz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 21:35:28