如何通过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
相关产品推荐
相关产品推荐

