Skip to main content
Nordlys logo, a drawing of two gray mountains with green northern lights in the background 陈迪の自留地

Back to all posts

为了方便发布文章,我写了两个脚本

Published on by Chen Di · 3 min read

Table of Contents

Show more

用了 hugo 一段时间后,感觉每次新建文章都有些不顺手。程序自身的自带的 hugo new 命令创建的文章并不能实现自定义 slug, 于是用 python-slugify 库实现了自己的需求。

新建文章脚本

记得安装库 pip3 install python-slugify

import os
import datetime
from slugify import slugify
from datetime import timezone, timedelta

def generate_slug(title):
    # 将标题转换为slug
    slug = slugify(title)
    return slug

def create_hugo_article(title, content_dir='content'):
    # 获取当前日期和时间,并设置为北京时间(东八区)
    now = datetime.datetime.now(timezone(timedelta(hours=8)))
    date_str = now.strftime("%Y-%m-%dT%H:%M:%S%z")  # 输出带时区的时间格式
    
    # 处理时区格式,将 "+0800" 转换为 "+08:00"
    date_str = date_str[:-2] + ":" + date_str[-2:]
    
    # 生成 slug
    slug = generate_slug(title)
    
    # 定义文章文件名
    filename = f"{now.strftime('%Y-%m-%d')}-{title}.md"
    
    # 定义 Front Matter 模板,添加 slug 字段
    front_matter = f"""---
title: "{title}"
slug: "{slug}"
date: {date_str}
tags: []
---

"""
    
    # 获取文件路径
    file_path = os.path.join(content_dir, filename)
    
    # 创建目标文件夹(如果不存在)
    os.makedirs(content_dir, exist_ok=True)
    
    # 写入 Front Matter 和模板内容
    with open(file_path, 'w', encoding='utf-8') as f:
        f.write(front_matter)
        f.write("# 文章内容\n\n")
        f.write("这里是文章的正文内容。可以开始写作了。\n")
    
    print(f"文章模板已创建:{file_path}")

# 调用函数创建文章
if __name__ == "__main__":
    title = input("请输入文章标题: ")  # 用户输入标题
    create_hugo_article(title)

新建文章命令:python3 create_post.py

发布文章脚本

#!/bin/bash

# 开启代理,如果需要
export http_proxy="http://127.0.0.1:7897"
export https_proxy="http://127.0.0.1:7897"

# 进入 Hugo 项目的目录
cd /Users/kevin/Documents/github/blog

# 查看当前 Git 状态
echo "查看当前 Git 状态..."
git status

# 提示用户是否提交
read -p "是否提交本次更改?(y/n): " confirm

# 如果用户输入 y,则继续提交,否则退出脚本
if [[ "$confirm" == "y" || "$confirm" == "Y" ]]; then
    echo "添加更改..."
    git add .

    echo "提交更改..."
    git commit -m "update"

    echo "推送更改..."
    git push

    echo "发布完成!"
else
    echo "操作已取消,未提交更改。"
fi

发布文章命令:sh deploy.sh