Blog Delete Post Skill
Delete blog posts with interactive selection, automatic cleanup of associated images, and immediate deployment to GitHub.
What I do
- •List all blog posts with titles and file names
- •Let users select which post(s) to delete via number, title, or keyword
- •Remove both the markdown file and associated image directories
- •Automatically commit and push changes to GitHub
- •Confirm successful deletion and deployment
When to use me
Use this skill when the user wants to:
- •Remove a blog post from the website
- •Delete old, outdated, or unwanted articles
- •Clean up test posts or drafts
- •Unpublish content
Trigger phrases (examples)
- •"删除文章"
- •"删除 Docker 那篇文章"
- •"帮我移除某篇博客文章"
- •"delete the kubernetes post"
- •"remove an article from my blog"
- •"我想删掉一篇文章"
How I work
Step 1: ALWAYS list all blog posts first
IMPORTANT: You MUST always display the complete list of articles, even if the user specified a keyword in their request. This gives the user context and confirms what will be deleted.
Use the Bash and Read tools to discover all posts:
cd ~/wzh_blog/my-blog/content/posts ls -1 *.md
For each .md file found, extract the title from front matter:
grep "^title:" <filename> | head -1
Present the list to the user in a clean, numbered format:
📚 当前博客文章列表: 1. Docker 化迁移实战:将 C++ 项目容器化 文件: my-first-post.md 2. Kubernetes 入门教程 文件: kubernetes-tutorial.md 3. Python 最佳实践指南 文件: python-best-practices.md 共 3 篇文章
Step 2: Get user selection
Ask the user which post to delete. Accept multiple input formats:
- •By number: "1" or "2"
- •By title: "Docker 化迁移实战" or "docker"
- •By filename: "my-first-post.md" or "my-first-post"
- •By keyword: "kubernetes" (matches title)
If the user already specified in their original request (e.g., "删除 Docker 那篇文章"), match it against the list automatically.
Matching logic:
- •Exact number match → select that post
- •Exact filename match (with or without .md) → select that post
- •Partial title match (case-insensitive) → select that post
- •If multiple matches, show them and ask user to clarify
- •If no match, show error and ask again
Step 3: Confirm deletion
Before deleting, always confirm with the user:
⚠️ 确认删除以下文章? 标题: Kubernetes 入门教程 文件: content/posts/kubernetes-tutorial.md 图片: static/images/kubernetes-tutorial/ (如果存在) 此操作将: 1. 删除 markdown 文件 2. 删除图片目录(如果存在) 3. 自动提交并推送到 GitHub 4. 文章将从网站上移除 确认删除?(y/N):
Only proceed if user confirms with 'y' or 'yes'.
Step 4: Delete files
Delete the markdown file:
cd ~/wzh_blog/my-blog rm "content/posts/<filename>"
Check and delete image directory:
# Check if image directory exists if [ -d "static/images/<article-name>/" ]; then rm -rf "static/images/<article-name>/" echo "✓ 已删除图片目录" else echo "ℹ️ 没有找到对应的图片目录" fi
The article name is the filename without the .md extension.
Step 5: Commit and push to GitHub
Automatically commit and push the changes:
cd ~/wzh_blog/my-blog git add -A git commit -m "chore: 删除文章《<article-title>》" git push
Important: Use the article title in the commit message, not the filename.
Step 6: Confirm success
Show a clear success message:
✅ 删除成功! ✓ 已删除 content/posts/kubernetes-tutorial.md ✓ 已删除 static/images/kubernetes-tutorial/ ✓ 已提交更改到 Git ✓ 已推送到 GitHub 🚀 GitHub Actions 正在部署... 文章已从博客移除,几分钟后生效: https://wzh001create.github.io/ 剩余文章数: 2
Important paths and files
- •Blog root directory:
~/wzh_blog/my-blog/ - •Posts directory:
~/wzh_blog/my-blog/content/posts/ - •Images directory:
~/wzh_blog/my-blog/static/images/ - •Blog URL:
https://wzh001create.github.io/
Error handling
No posts found
If content/posts/ is empty or has no .md files:
ℹ️ 博客中没有文章 你可以使用 blog-import-post skill 来添加文章。
User cancels
If user says 'n' or 'no' to confirmation:
✓ 已取消删除操作 文章未被删除。
File not found
If the selected file doesn't exist (shouldn't happen, but handle gracefully):
❌ 错误: 文件不存在 content/posts/<filename> 未找到。 请重新运行并选择有效的文章。
Git push fails
If git push fails (network issue, auth problem, etc.):
❌ 推送失败 文件已在本地删除,但未能推送到 GitHub。 错误信息: <error-output> 请检查网络连接和 Git 认证,然后手动推送: cd ~/wzh_blog/my-blog git push
Important notes
- •ALWAYS list all posts first (even if user specified a keyword) - this is a REQUIREMENT
- •Always confirm before deleting (no silent deletions)
- •Always auto-commit and auto-push (as per user requirement)
- •Use the article's title in commit messages, not the filename
- •Handle Chinese characters properly in all operations
- •Check if image directory exists before trying to delete it
- •Show clear feedback for every step
- •Token optimization: Use grep to extract titles, don't read entire files
Example interaction 1: Simple deletion
User input:
删除文章
Your response:
📚 当前博客文章列表: 1. Docker 化迁移实战:将 C++ 项目容器化 (my-first-post.md) 2. Kubernetes 入门教程 (kubernetes-tutorial.md) 请输入要删除的文章序号或标题:
User input:
2
Your response:
⚠️ 确认删除《Kubernetes 入门教程》? 文件: content/posts/kubernetes-tutorial.md 图片: static/images/kubernetes-tutorial/ 确认删除?(y/N):
User input:
y
Your response:
正在删除文章... ✓ 已删除 content/posts/kubernetes-tutorial.md ✓ 已删除 static/images/kubernetes-tutorial/ ✓ 已提交: chore: 删除文章《Kubernetes 入门教程》 ✓ 已推送到 GitHub 🚀 GitHub Actions 正在部署... ✅ 删除成功!文章已从博客移除: https://wzh001create.github.io/
Example interaction 2: Direct keyword deletion
User input:
删除 Docker 那篇文章
Your response:
📚 找到匹配的文章: 1. Docker 化迁移实战:将 C++ 项目容器化 (my-first-post.md) ⚠️ 确认删除《Docker 化迁移实战:将 C++ 项目容器化》? 文件: content/posts/my-first-post.md 图片: static/images/my-first-post/ (如果存在) 确认删除?(y/N):
Tools you should use
- •Bash: To list posts, delete files, and run git commands
- •Read: To extract titles from front matter
- •Glob: To find all .md files in content/posts/ (optional, can use bash ls)
- •Question: To get user input if their selection is unclear
Remember:
- •Always show what you're doing with clear status messages
- •Be safe: always confirm before deleting
- •Be thorough: clean up both files and images
- •Be automatic: commit and push without asking (as per requirement)