前情回顾
哈喽同学们,首先给大家推荐一个 博客+知识库的主题 vuepress-theme-vdoing
怎么样,是不是非常的好看。
在按照 教程 成功搭建之后,我发现了一个问题,作者现有的文章质量真的不错,我真的不舍得清空掉,但是我把默认作者设置成我自己之后,这些文章就变成了我自己,这可不行,但是手动一个一个改又很费劲,so? 写了个nodejs 脚本来批量改作者信息
开始编程
import fs from "fs";
import path from "path";
// 遍历文件夹
// dirArray 该文件夹下文件数组
// callback 回调(写入作者信// 遍历文件夹息的函数)
// _path 上级目录
function readDirArray(dirArray, callback, _path) {
// 遍历文件
dirArray.forEach(dir => {
// 获取完整路径
var filePath = path.join(_path, dir);
// 获取文件状态
var stat = fs.statSync(filePath);
// 判断是否为文件夹
if (stat.isFile()) {
// 文件则调用回调函数
// 这里可以加一些限制,因为我的文件夹里都是md所有没有限制
callback(filePath);
} else {
// 获取当前文件夹内文件数组
const dirArray2 = fs.readdirSync(filePath);
// 递归
readDirArray(dirArray2, callback, filePath);
}
});
}
function addAuthor(filePath) {
// 读取该文件
const content = fs.readFileSync(filePath, "utf-8");
// 切分数组
const data = content.split(/\r\n|\n|\r/gm);
// 看当前md里是否有作者信息
if (content.search("author") == -1) {
// 添加数据
data.splice(4, 0, "author:");
data.splice(5, 0, " name: xugaoyi");
data.splice(6, 0, " link: https://github.com/xugaoyi");
// 写入
fs.writeFileSync(filePath, data.join("\r\n"));
}
}
// 需要修改md文档的文件夹
const fileNameList = [
"../../../My-website/link-press/docs/01.前端",
"../../../My-website/link-press/docs/02.页面",
"../../../My-website/link-press/docs/03.技术",
"../../../My-website/link-press/docs/04.更多",
"../../../My-website/link-press/docs/06.收藏夹",
];
fileNameList.forEach(fileName => {
// 遍历文件
readDirArray(
fs.readdirSync(fileName),
filePath => addAuthor(filePath),
fileName
);
});
完整代码
import fs from "fs";
import path from "path";
// 遍历文件夹
function readDirArray(dirArray, callback, _path) {
dirArray.forEach(dir => {
var filePath = path.join(_path, dir);
var stat = fs.statSync(filePath);
if (stat.isFile()) {
callback(filePath);
} else {
// 递归
const dirArray2 = fs.readdirSync(filePath);
readDirArray(dirArray2, callback, filePath);
}
});
}
// 插入作者
function addAuthor(filePath) {
const content = fs.readFileSync(filePath, "utf-8");
const data = content.split(/\r\n|\n|\r/gm);
if (content.search("author") == -1) {
data.splice(4, 0, "author:");
data.splice(5, 0, " name: xugaoyi");
data.splice(6, 0, " link: https://github.com/xugaoyi");
fs.writeFileSync(filePath, data.join("\r\n"));
}
}
// 需要修改md文档的文件夹
const fileNameList = [
"../../../My-website/link-press/docs/01.前端",
"../../../My-website/link-press/docs/02.页面",
"../../../My-website/link-press/docs/03.技术",
"../../../My-website/link-press/docs/04.更多",
"../../../My-website/link-press/docs/06.收藏夹",
];
fileNameList.forEach(fileName => {
readDirArray(
fs.readdirSync(fileName),
filePath => addAuthor(filePath),
fileName
);
});