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

我想从一个目录中删除几个文件,匹配一个正则expression式。 像这样的东西:

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

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

 var fs = require('fs'); fs.readdir('.', (error, files) => { if (error) throw error; files.filter(name => /script\.\d+\.js$/.test(name)).forEach(fs.unlink); }); 

哪个起作用,但国际海事组织比它应该更复杂一点。


有一个更好的内置方式来删除匹配正则expression式的文件(甚至只是使用通配符)?

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

 require("glob").glob("*.txt", function (er, files) { ... }); //or files = require("glob").globSync("*.txt"); 

glob内部使用minimatch。 它通过将globexpression式转换为JavaScript RegExp对象来工作。 https://github.com/isaacs/minimatch

你可以用callback中匹配的文件做任何你想做的事(或者globSync返回的对象)。

答案可能取决于你的环境。 它看起来像你在node.js上运行。 对node.js文档的快速浏览表明,没有“内置”的方式来做到这一点,也就是说,没有一个函数调用会为您执行此操作。 次好的事情可能涉及less量的函数调用。 正如我在我的评论中写的,我不认为有任何简单的方法可以让你的build议答案简单得多,只要依靠标准的node.js函数调用即可。 也就是说,如果我在你的鞋子里,我会用你已经build议的解决scheme(尽pipe稍微清理一下)去解决。

一种select是去壳,例如,

 var exec = require('child_process').exec; exec('ls | grep "script[[:digit:]]\\\+.js" | xargs rm'); 

就个人而言,我强烈希望你提供的解决scheme在这个gobbledygook,但也许你正在拍摄不同的东西。

我有一个非常简单的解决scheme来做到这一点。 使用fs.readdir API读取node.js中的目录。 这将给出目录中所有文件的数组。 一旦你有了这个数组,使用for循环迭代它,应用正则expression式。 下面的代码将删除以“en”和扩展名“.js”开头的所有文件

 fs.readdir('.', (err, files)=>{ for (var i = 0, len = files.length; i < len; i++) { var match = files[i].match(/en.*.js/); if(match !== null) fs.unlink(match[0]); } });