Javascript 在Node.js中输入glob并仅返回匹配项(无前导路径)

Javascript 在Node.js中输入glob并仅返回匹配项(无前导路径),javascript,node.js,coffeescript,glob,Javascript,Node.js,Coffeescript,Glob,我需要glob/。/path/to/files/***/.txt,而不是像这样接收匹配项: /。/path/to/files/subdir/file.txt 我需要把根剥掉: subdir/file.txt 目前,我有: oldwd = process.cwd() process.chdir(__dirname + "/../path/to/files") glob.glob("**/*.txt", function (err, matches) { process.chdir(oldwd)

我需要glob
/。/path/to/files/***/.txt
,而不是像这样接收匹配项:

/。/path/to/files/subdir/file.txt

我需要把根剥掉:

subdir/file.txt

目前,我有:

oldwd = process.cwd()
process.chdir(__dirname + "/../path/to/files")
glob.glob("**/*.txt", function (err, matches) {
  process.chdir(oldwd)
});
但它有点难看,而且似乎也有一个种族条件:有时glob发生在oldwd上。所以这必须要走了

我正在考虑简单地映射
匹配项
,并使用字符串操作剥离前导路径。由于glob返回匹配项并解析dotdir,我想我必须对搜索和替换字符串执行相同的操作。这已经够混乱的了,我想知道是否有更好的(内置或库?)方法来处理这个问题

那么,在Node.js中glob并获得“匹配”部分的一种好的、简洁的、正确的方法是什么呢?JavaScript和CoffeeScript对我来说都很好

试试这个:

var path = require('path');
var root = '/path/to/files';
glob.glob("**/*.txt", function(err, matches) {
    if(err) throw err;
    matches = matches.map(function(match) {
        return path.relative(root, match);
    });
    // use matches
});

将目录中的文件传递给选项,并由glob处理所有的混乱

glob.glob("**/*.txt", {cwd: '../../wherever/'}, function(err, matches) {
    ...
});

嗯,不幸的是,我在节点0.4.x上,path.relative似乎更晚addition@Rebe:您可以从中剪出
相对
。(或者重命名整个模块并将其全部拉入,这可能是一个更好的主意)这是最好的答案。当我需要与节点应用程序的根目录相关的文件路径时,我不使用
cwd
。如果与一起使用,它可以方便地以相同的方式(相对于应用程序的根目录)从任何模块请求内容:例如,
require(“~/app/file.txt”)