根据文件所在目录更改文件中的内容
chou403
/ Tool
/ c:
/ u:
/ 3 min read
一学一个不吱声
为了实现这个需求,你可以使用 Node.js 脚本来遍历 src
目录下的所有文件,并将每个文件中的 category
数据替换为文件所在的目录名称。以下是一个示例脚本:
import * as fs from "fs";
import * as path from "path";
// 遍历目录并处理文件
function traverseDirectory(dir: string) {
fs.readdirSync(dir).forEach((file) => {
const filePath = path.join(dir, file);
const stat = fs.statSync(filePath);
if (stat.isDirectory()) {
traverseDirectory(filePath);
} else if (stat.isFile() && filePath.endsWith(".mdx")) {
processFile(filePath, path.basename(dir));
}
});
}
// 处理单个文件
function processFile(filePath: string, directoryName: string) {
let content = fs.readFileSync(filePath, "utf-8");
const regex = /category\s*:\s*(\S+)/;
const match = content.match(regex);
if (match) {
content = content.replace(match[0], `category: ${directoryName}`);
fs.writeFileSync(filePath, content, "utf-8");
console.log(`Updated ${filePath}`);
} else {
console.log(`No category found in ${filePath}`);
}
}
// 从 src 目录开始遍历
const srcDir = path.join(__dirname, "src");
traverseDirectory(srcDir);
说明
- 遍历目录:
traverseDirectory
函数递归地遍历src
目录下的所有文件和子目录。 - 处理文件:
processFile
函数读取文件内容,查找category
字段,并将其替换为文件所在目录的名称。 - 正则表达式: 使用正则表达式
/category\s*:\s*(\S+)/
来匹配category
字段及其值。 - 写回文件: 将修改后的内容写回文件,并在控制台输出更新信息。
运行脚本
- 将上述脚本保存为
updateCategories.ts
。 - 使用 TypeScript 编译器编译脚本:
tsc updateCategories.ts
- 运行编译后的 JavaScript 文件:
node updateCategories.js
这样,脚本会遍历 src
目录下的所有 .mdx
文件,并将每个文件中的 category
数据替换为文件所在的目录名称。
目前已将上述操作移动到 py 执行,调整为只修改以---
开始,以---
结尾的内容。
import os
import re
def replace_category_from_dir_name(text, directory_name):
# 使用正则表达式匹配 --- 开始和 --- 结束之间的内容
pattern = re.compile(r'---\n(.*?)\n---', re.DOTALL | re.MULTILINE)
def replace_match(match):
# 在匹配的内容中进行替换
content = match.group(1)
replaced_content = re.sub(r'category\s*:\s*\S+', f'category: {directory_name}', content)
return f'---\n{replaced_content}\n---'
# 替换所有匹配的内容
return pattern.sub(replace_match, text)