使用通配符匹配查找文件

aha*_*ala 63 node.js

在node.js中,我可以列出具有匹配的通配符的文件

fs.readdirSync('C:/tmp/*.csv')?
Run Code Online (Sandbox Code Playgroud)

我没有从fs文档中找到有关外卡匹配的信息.

Mor*_*len 64

Node核心不包含这一点.您可以查看此模块,了解您的目标.npmjs.org也是查找各种模块的绝佳资源.

用法

var glob = require("glob")

// options is optional
glob("**/*.js", options, function (er, files) {
  // files is an array of filenames.
  // If the `nonull` option is set, and nothing
  // was found, then files is ["**/*.js"]
  // er is an error object or null.
})
Run Code Online (Sandbox Code Playgroud)

  • @MorganARRAllen虽然我同意人们应该使用链接资源,但它也是Stackoverflow标准的一部分,包括你在答案中描述的样本.我倾向于同时做这两个,因为这个答案在编辑之后做了,既有链接也有代码片段.毕竟,链接可以随着时间的推移而被打破. (13认同)
  • 代码示例会有所帮助. (4认同)
  • 这不是更好.更好的是让人们使用与该主题相关的资源.在这种情况下,学习使用NPM/npmjs.org. (3认同)
  • 如果您正在寻找同步解决方案,上面提到的glob库也有一个同步方法https://github.com/isaacs/node-glob#globsyncpattern-options (3认同)

Jai*_*ime 53

如果您不想为项目添加新的依赖项(例如glob),则可以使用普通的js/node函数,例如:

var files = fs.readdirSync('C:/tmp').filter(fn => fn.endsWith('.csv'));
Run Code Online (Sandbox Code Playgroud)

Regex 可能有助于更复杂的比较

  • 很好的解决方案!我检查过的 glob 库也使用 readdirSync() 并解析结果。但在大多数情况下,1 行解决方案比向项目添加新的依赖项更快 (6认同)

Aba*_*art 9

如果glob不是你想要的,或者有点令人困惑,那么还有glob-fs.该文档涵盖了许多使用场景和示例.

// sync 
var files = glob.readdirSync('*.js', {});

// async 
glob.readdir('*.js', function(err, files) {
  console.log(files);
});

// stream 
glob.readdirStream('*.js', {})
  .on('data', function(file) {
    console.log(file);
  });

// promise 
glob.readdirPromise('*.js')
  .then(function(files) {
    console.log(file);
  });
Run Code Online (Sandbox Code Playgroud)


小智 7

开箱即用,非常简单

import fs from 'fs'

fs.readdirSync('C:/tmp/').filter((allFilesPaths:string) => 
    allFilesPaths.match(/\.csv$/) !== null)
Run Code Online (Sandbox Code Playgroud)