我需要全局./../path/to/files/**/*.txt
但不接收这样的匹配:
./../path/to/files/subdir/file.txt
我需要删除root:
subdir/file.txt
目前,我有:
oldwd = process.cwd()
process.chdir(__dirname + "/../path/to/files")
glob.glob("**/*.txt", function (err, matches) {
process.chdir(oldwd)
});
但它有点难看,而且似乎也有竞争条件:有时候会在oldwd上发生。所以必须这样做。
我正在考虑简单地映射matches
并使用字符串操作剥离前导路径。由于glob返回与dotdirs解决的匹配,我想我必须对我的搜索和替换字符串做同样的事情。这已经变得非常混乱,我想知道是否有更好的(内置或库?)方式来处理它。
那么,什么是一个漂亮,整洁和正确的方式来在Node.js和只是得到“匹配”部分? JavaScript和CoffeeScript都可以和我一起使用
答案 0 :(得分:16)
将目录传递给选项,并由glob完成所有麻烦。
glob.glob("**/*.txt", {cwd: '../../wherever/'}, function(err, matches) {
...
});
答案 1 :(得分:4)
试试这个:
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
});