在这篇博文中,我将解释如何重命名一组文件。
同样的过程适用于将文件移动到另一个文件夹,因为当你重命名时,你会重命名文件的路径。
这个任务的动机是这样的:在Hugo中,我们可以把博文写成文件,像这样。
first-post.md
second-post.md
third-post.md
我们也可以把它们添加到一个包含index.md 文件的文件夹里。
first-post/
> index.md
second-post/
> index.md
third-post/
> index.md
不同的是,通过文件夹,我们可以添加图片,并将它们更容易地与博文联系起来。
我可以手动完成这个改变,但我在文件夹里有大约50个文件,我真的不想做这个工作。
我希望它能自动发生。
让我们首先要求我们要使用的一个核心模块:fs 。因为它是一个核心模块,所以不需要npm install 。
然后,得到一个对当前文件夹的引用。我想我们要在我们要执行这个改变的同一文件夹中运行脚本。
__dirname 是变量,它总是指向当前的工作文件夹。
我得到一个所有文件和文件夹的列表。
const files = fs.readdirSync(__dirname)
然后我只过滤出以.md 结尾的项目。
for (const file of files) {
if (file.endsWith('.md')) {
console.log(file)
}
}
一旦我们有了代表文件名的file 引用,我们就可以调用fs.mkdirSync() 来创建文件夹。
fs.mkdirSync(
__dirname + '/' + file.replace('.md', ''),
{ recursive: true },
(err) => {
console.log(err)
}
)
一旦我们创建了文件夹,我们就调用fs.renameSync() 。
我之所以使用阻断版本 mkdirSync() 和renameSync() ,而不是mkdir() 和rename() ,是因为我想等到文件夹被创建后再将文件移到文件夹中。否则,如果第二个函数在第二个函数之前运行,我们可能会出错(我想使用await ,但Node.js的API不使用承诺,我们必须使用promise,但使用这些API的阻塞版本更简单)。
fs.renameSync() 函数接受3个参数。
- 当前路径
- 我们想要移动到的路径
- 发生错误时的回调。
当前路径是。
我们要移动到的路径是。
__dirname + '/' + file.replace('.md', '') + '/index.md'
看到了吗?我们根据文件名创建一个新的文件夹,然后添加index.md 。
fs.renameSync(
__dirname + '/' + file,
__dirname + '/' + file.replace('.md', '') + '/index.md',
err => {
console.log(err)
}
)
下面是完整的代码。
const fs = require('fs')
const files = fs.readdirSync(__dirname)
for (const file of files) {
if (file.endsWith('.md')) {
fs.mkdirSync(
__dirname + '/' + file.replace('.md', ''),
{ recursive: true },
(err) => {
console.log(err)
}
)
fs.renameSync(
__dirname + '/' + file,
__dirname + '/' + file.replace('.md', '') + '/index.md',
(err) => {
console.log(err)
}
)
}
}