删除(取消链接)与正则表达式匹配的文件

Jos*_*ber 23 javascript filesystems file-io node.js

我想删除目录中的几个文件,匹配正则表达式.像这样的东西:

// WARNING: not real code
require('fs').unlink(/script\.\d+\.js$/);
Run Code Online (Sandbox Code Playgroud)

由于unlink不支持正则表达式,我使用它代替:

var fs = require('fs');

fs.readdir('.', (error, files) => {
    if (error) throw error;

    files.filter(name => /script\.\d+\.js$/.test(name)).forEach(fs.unlink);
});
Run Code Online (Sandbox Code Playgroud)

这是有效的,但IMO比它应该更复杂.


是否有更好的内置方法来删除与正则表达式匹配的文件(甚至只是使用通配符)?

dav*_*pfx 23

不,Node 库中没有通配符。如果你不想从 NPM 中提取一些东西,那么不用担心,它只需要一行代码。但是在我的测试中,其他答案中提供的代码大多不起作用。所以这是我的代码片段,经过测试,可以正常工作,纯原生 Node 和 JS。

let fs = require('fs')
const path = './somedirectory/'
let regex = /[.]txt$/
fs.readdirSync(path)
    .filter(f => regex.test(f))
    .map(f => fs.unlinkSync(path + f))
Run Code Online (Sandbox Code Playgroud)

  • 这应该是最好的答案。复制、粘贴、调整正则表达式,我想删除的文件就被删除了。 (2认同)

use*_*109 10

你可以查看glob https://npmjs.org/package/glob

require("glob").glob("*.txt", function (er, files) { ... });
//or
files = require("glob").globSync("*.txt");
Run Code Online (Sandbox Code Playgroud)

glob内部使用minimatch.它的工作原理是将glob表达式转换为JavaScript RegExp对象.https://github.com/isaacs/minimatch

您可以使用回调中匹配的文件执行任何操作(或者在globSync的情况下返回对象).