如何查询目录树而不将其加载到内存中

时间:2018-01-18 09:35:57

标签: node.js filesystems querying

我有一个根目录,例如事件

每个事件都是一个包含文件的目录,并且有数百万个事件。

事件目录中的目录:

...
2018-01-17-18:40:51.151343-1bb809
2018-01-17-20:55:22.627688-26ada5
2018-01-17-20:55:27.919532-8243cd
2018-01-17-20:56:30.743072-94e913
2018-01-17-20:57:39.824845-64ccb7
...

我想做的是:

  • 逐个加载目录,而不是在一次调用中加载,例如的 fs.readDir

  • 由于目录名称带有时间戳,我希望能够使用

  • 查询它们

e.g。

{ time: 
    $gte: t1
    $lte: t2
}

我如何在没有同时读取内存中的所有目录的情况下执行此查询?

我正在使用NodeJs 9

1 个答案:

答案 0 :(得分:1)

使用纯node.js File System functions你无法做到。

fs.readdir存在,但它会立即返回所有名称。

你能做什么

使用node.js执行命令行:

所以你可以做find -regex "Here the regexp to match your dates"

来自堆栈的示例 here by @hexacyanide

const util = require('util');
const exec = util.promisify(require('child_process').exec);

async function ls() {
  const { stdout, stderr } = await exec('ls');
  console.log('stdout:', stdout);
  console.log('stderr:', stderr);
}

ls();