如何使用nodejs walk模块将目录移至第一级

时间:2016-04-26 15:03:03

标签: javascript node.js directory

我有以下目录结构

 Ranveers-MacBook-Air:custom-feeds ranveer$ ls    /Users/ranveer/custom-feeds
README.md   cartridges  sites
Ranveers-MacBook-Air:custom-feeds ranveer$

我想遍历上面的目录,在输出中我只需要第一个目录(即第一级)

所需的输出(目录+完整路径)

  1. /用户/ ranveer /定制饲料/盒
  2. /用户/ ranveer /定制饲料/位点
  3. 我尝试使用以下代码生成我想要的输出

    walk = require('walk');
    walker = walk.walk('/Users/ranveer/custom-feeds');
    walker.on('directories' , (root, dirStatsArray, next) => {
        console.log(dirStatsArray);
        next();
    });
    

    我在节点控制台中得到以下输出

    > walker.on('directories' , (root, dirStatsArray, next) => {
    ...     console.log(dirStatsArray);
    ...     next();
    ... });
    Walker {
      domain:
       Domain {
         domain: null,
         _events: { error: [Function] },
         _eventsCount: 1,
         _maxListeners: undefined,
         members: [] },
      _events: { directories: [Function] },
      _eventsCount: 1,
      _maxListeners: undefined,
      _wStat: 'lstat',
      _wStatSync: 'lstatSync',
      _wsync: false,
      _wq: [],
      _wqueue: [],
      _wcurpath: '/Users/ranveer/custom-feeds/.git/logs/refs/heads',
      _wfilters: [],
      _wfirstrun: true,
      _wWalk: [Function],
      _wfnodegroups:
       { files: [ [Object] ],
         directories: [],
         symbolicLinks: [],
         blockDevices: [],
         characterDevices: [],
         FIFOs: [],
         sockets: [],
         nodes: [],
         errors: [] },
      _wcurfiles: [ 'master' ],
      _wcurfile: 'master',
      _wCurFileCallback: [Function: next] }
    >
    

    我看不到我的console.log打印dirStatsArray

    那么,如何遍历目录直到第一级

2 个答案:

答案 0 :(得分:1)

你是不是只使用fs和path来非递归地遍历目录?

var fs = require('fs');
var path = require('path');

var p = './';

fs.readdir(p, function(err, files) {
  files.map(function(file) {
    return path.join(p, file);
  }).filter(function(file) {
    return fs.statSync(file).isDirectory();
  }).forEach(function(file) {
    console.log(file);
  });
});

答案 1 :(得分:0)

因此,在查看github上的模块代码并查看一些已关闭的问题后,正确的方法是走到1 level深度是为了不调用next()

由于next()强制进行递归调用。

https://github.com/coolaj86/node-walk/issues/28