hexo 实现文章标题与文件名同步


使用背景

当你使用了笔记软件来进行管理,或是进行文件双向链接时,文件名称总是个大问题。

因为你很可能对刚开始起的名字不满意,然后就在 frontmatter 中修改了 title 但是问题来了,你的文件名没改,这意味着你需要手动去修改,这无疑不符合程序员 “尽可能偷懒的工作这一原则”,因此我写了这个 js 文件

使用方法

这个是针对 hexo 的,其他的请自行进行适配性调整。

  1. 创建一个 rename.js 文件(建议放在根目录下,这样下面的代码基本不用改),并插入下列代码,注意用编译器打开,不然会出现乱码(文件编码不匹配
#!/usr/bin/env node
console.log('脚本开始运行..');

var fs = require("fs"); //请求文件系统

var file = "./txt"; //设置读取和写入的文件,这里还没用
var RegExp=/(title:\s*)(.*)/g;

var toppath="./source/_posts/";//目标文件夹,根据你放的位置进行修改,不建议使用绝对路径,因为这样不利于你博客的备份与恢复。我是放在博客的根目录下,然后进行定位
function fn(path){
	fs.readdir(path,(err,files)=>{
		files.forEach(function(item){
			fs.stat(path+item+'/',(err,data)=>{
				if(data.isFile()){
					if(item.indexOf(".md")>-1){
						writeFileName(path,path+item,fs);
					}
				}else{
					fn(path+item+'/')
				}
			})
		})
	})
}
fn(toppath)

function writeFileName(path,file,fs){

	fs.readFile(file, 'utf8',function(err, data) { //读取文件内容

		if (err) return console.log("读取文件内容错误:",err);
		if(RegExp.test(data)){ //如果匹配到`title`字段
			var title=data.match(RegExp)[0];
			var name=title.substr(7);
			// console.log(name);
			if(file!=path+name+'.md')
			fs.rename(file,path+name+'.md',(err)=>{
				if(err) throw err;
				console.log('把'+file+'改成'+path+name+'.md');
				})




		}
	});

}
  1. 然后在 git 中调用这个 js 文件即可。(为什么不写个sh脚本一键化操作呢ψ(`∇´)ψ)\

效果

注意事项

因为代码书写的原因,请确保 title:后仅有一个空格,这个是bug,不过我懒得修了。。。


如果本文帮助到了你,帮我点个广告可以咩(o′┏▽┓`o)


评论
  目录