Skip to main content

Fragments

批量生成博客草稿文件到对应月份文件夹

Table of Contents

真是万万没想到,在日记博我都可以写这个。之前我还纠结到底怎么在手机上写,得嘞,现在一了百了,我把草稿文件全都创建了,就算临时要在手机写,打开手机 Github 直接编辑对应文档,最后把 draft 值改了就行。

但执行这个创建文件的命令还是要在电脑搞的,以下:

## 创建 docker container folder

在 Github 博客 repo 中创建 codespace,在根目录新建 .devcontainer 文件夹,在此文件夹中创建 devcontainer.json 文件,内容如下(name 当然可以随便取):

{
  "name": "Fragment Blog",   
  "image": "mcr.microsoft.com/vscode/devcontainers/python:3.9",
  "customizations": {
    "vscode": {
      "settings": {
        "terminal.integrated.shell.linux": "/bin/bash"
      }
    }
  }
}

## 新建 generate_md_files.py 文件


import os
from datetime import datetime, timedelta

# Define the number of files and the starting date, 文件数和起始时间自己改
num_files = 10
start_date = datetime(2025, 1, 1)

# Template content with placeholders for title and date
template_content = """---
title: "{date}"
date: "{date}"
tags:
  - Daily
draft: true
hidden: false
disable_feed: false
---

"""

# Generate files
for i in range(num_files):
    date = start_date + timedelta(days=i)
    date_str = date.strftime('%Y-%m-%d')
    year_month = date.strftime('%Y-%m')
    output_dir = os.path.join('posts_folder', year_month) 
    # posts_folder 的地址是在 codespace 中 博客内容对应的file path,右击 `posts`文件夹 copy path 即可
    os.makedirs(output_dir, exist_ok=True)
    filename = os.path.join(output_dir, f"{date_str}.md")
    content = template_content.format(date=date_str)
    with open(filename, 'w') as new_file:
        new_file.write(content)

print(f'{num_files} Markdown files generated successfully in their respective directories.')

## 运行脚本

在 terminal 中运行


python generate_md_files.py

## 最终结果

批量生成带 metadata 的 markdown 文件到以“年+月”格式命名的文件夹。

万一到年底有的日期没写就筛一遍把 draft 为 false 的文件全删了就行!


一开始我一口气生成了 2025 整年的文件在 posts 文件夹下但看着实在是有点让人头晕,于是又写了个脚本把这些文件挪到对应的新建月份文件夹去,再把原始脚本改了改。接着发现这样一来岂不是过去的文章又要生成一遍 RSS?虽然我很怀疑到底谁订阅了,但还是又搞了个脚本把已发表的文件统统加了个 disable_feed property 并且设置为 True。说真的没有 AI 我可怎么办啊, 其实心里有点担忧,我是不是该认真学学 python 不然离了 AI 我就真成弱智了……

comments powered by Disqus