递归md文档添加作者

195 阅读2分钟

前情回顾

哈喽同学们,首先给大家推荐一个 博客+知识库的主题 vuepress-theme-vdoing

作者是 Even Xu 预览地址

怎么样,是不是非常的好看。

在按照 教程 成功搭建之后,我发现了一个问题,作者现有的文章质量真的不错,我真的不舍得清空掉,但是我把默认作者设置成我自己之后,这些文章就变成了我自己,这可不行,但是手动一个一个改又很费劲,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
  );
});