节点向上搜索文件

时间:2018-02-19 10:49:12

标签: node.js

我正在寻找node.js中的一个函数来向上搜索文件系统,以检查给定文件是否存在,如果存在,则获取其内容。

例如,如果我有以下文件夹结构:

* root |--dir1 | |-dir2 | |-dir3 |... 如果我在dir3中,我想搜索一个可以在任何文件夹中的给定文件,如果我上..但不在他们的子文件夹中。所以我想要的是一个简单的方法来检查当前文件夹中的文件,如果它不存在上去一个文件夹并在那里搜索,直到你找到该文件或你在根文件夹中。

2 个答案:

答案 0 :(得分:0)

我觉得自己写起来很容易。您可以使用fs.readdirfs.readdirSync。 同步解决方案可能如下所示:(未经测试)

var fs = require('fs');
var process = require('process');
var path = require('path');
function findFile(filename, startdir) {
    if(!startdir) statdir = process.cwd();
    while(true) {
        var list = fs.readdirSync(startdir);
        if((index = list.indexOf(filename)) != -1)
            // found
            return fs.readFileSync(path.join([startdir, filename]));
        else if(startdir == '/')
            // root dir, file not found
            return null;
        else
            startdir = path.normalize(path.join([startdir, '..']));
     }
}

答案 1 :(得分:0)

还有一个NPM软件包-fileUp就是这样做的。

自述文件:

const path = require('path');
const findUp = require('find-up');

(async () => {
    console.log(await findUp('unicorn.png'));
    //=> '/Users/sindresorhus/unicorn.png'

    console.log(await findUp(['rainbow.png', 'unicorn.png']));
    //=> '/Users/sindresorhus/unicorn.png'

    console.log(await findUp(async directory => {
        const hasUnicorns = await findUp.exists(path.join(directory, 'unicorn.png'));
        return hasUnicorns && directory;
    }, {type: 'directory'}));
    //=> '/Users/sindresorhus'
})();