使用背景
当你使用了笔记软件来进行管理,或是进行文件双向链接时,文件名称总是个大问题。
因为你很可能对刚开始起的名字不满意,然后就在 frontmatter 中修改了 title 但是问题来了,你的文件名没改,这意味着你需要手动去修改,这无疑不符合程序员 “尽可能偷懒的工作这一原则”,因此我写了这个 js 文件
使用方法
这个是针对 hexo 的,其他的请自行进行适配性调整。
- 创建一个 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');
})
}
});
}
- 然后在 git 中调用这个 js 文件即可。(
为什么不写个sh脚本一键化操作呢ψ(`∇´)ψ)\
效果
注意事项
因为代码书写的原因,请确保 title:
后仅有一个空格,这个是bug,不过我懒得修了。。。