用go写了个简化hugo文章创建的小工具

目前使用hugo作为博客系统,使用typora作为博客的编辑器。书接上文Hugo使用技巧,之前每次都需要在博客根目录执行 hugo new posts/文章标题/index.md 创建新的文章。感觉很麻烦。所以想写个工具简化这个过程。 思路 输入文件标题后执行创建文章的命令,然后生成新的文章的快捷方式,方便使用typora进行编辑。 代码 使用Claude生成的,很方便。 如果是windows平台,使用 go build -o HugoHelper.exe main.go 进行编译。 使用前需要配置blog环境变量,key为blog,value为你的项目的根路径 比如我的根目录是C:\UGit\qvqw.date 代码 package main import ( "bufio" "fmt" "os" "os/exec" "path/filepath" "strings" ) func main() { // 获取当前程序执行路径 execPath, err := os.Getwd() if err != nil { fmt.Printf("错误: 获取当前路径失败: %v\n", err) os.Exit(1) } // 从环境变量获取博客路径 blogPath := os.Getenv("blog") if blogPath == "" { fmt.Println("错误: 环境变量 'blog' 未设置") os.Exit(1) } // 验证博客路径是否存在 if _, err := os.Stat(blogPath); os.IsNotExist(err) { fmt.Printf("错误: 博客路径不存在: %s\n", blogPath) os.Exit(1) } // 获取用户输入的文章标题 reader := bufio.NewReader(os.Stdin) fmt.Print("请输入文章标题: ") title, err := reader.ReadString('\n') if err != nil { fmt.Printf("错误: 读取输入失败: %v\n", err) os.Exit(1) } // 清理标题(移除空白字符和换行符) title = strings.TrimSpace(title) if title == "" { fmt.Println("错误: 标题不能为空") os.Exit(1) } // 构建 hugo 命令 cmd := exec.Command("hugo", "new", fmt.Sprintf("posts/%s/index.md", title)) cmd.Dir = blogPath cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr // 执行命令 if err := cmd.Run(); err != nil { fmt.Printf("错误: 创建文章失败: %v\n", err) os.Exit(1) } // 源文件路径(Hugo 创建的文件) sourceFile := filepath.Join(blogPath, "content", "posts", title, "index.md") // 目标软链接路径(在当前目录) linkName := filepath.Join(execPath, fmt.Sprintf("%s.md", title)) // 删除已存在的软链接(如果有的话) _ = os.Remove(linkName) // 创建软链接 err = os.Symlink(sourceFile, linkName) if err != nil { fmt.Printf("警告: 创建软链接失败: %v\n", err) } else { fmt.Printf("成功创建软链接: %s -> %s\n", linkName, sourceFile) } fmt.Printf("成功创建文章: %s\n", sourceFile) // 等待用户按回车键后退出 waitExit := bufio.NewReader(os.Stdin) fmt.Print("按回车键退出...") waitExit.ReadString('\n') } 注意 如果无法创建软链接,请使用管理员权限运行。 ...

January 7, 2025 · 1 min · LLP2333