node-dir

asynchronous file and directory operations for Node.js

node-dir

A lightweight Node.js module with methods for some common directory and file operations, including asynchronous, non-blocking methods for recursively getting an array of files, subdirectories, or both, and methods for recursively, sequentially reading and processing the contents of files in a directory and its subdirectories, with several options available for added flexibility if needed.

npm install node-dir

For the sake of brevity, assume that the following line of code precedes all of the examples.

var dir = require('node-dir');

Sequentially read the content of each file in a directory, passing the contents to a callback, optionally calling a finished callback when complete. The options and finishedCallback arguments are not required.

Valid options are:

  • encoding: file encoding (defaults to 'utf8')
  • exclude: a regex pattern or array to specify filenames to ignore
  • excludeDir: a regex pattern or array to specify directories to ignore
  • match: a regex pattern or array to specify filenames to operate on
  • matchDir: a regex pattern or array to specify directories to recurse
  • recursive: whether to recurse subdirectories when reading files (defaults to true)
  • reverse: sort files in each directory in descending order
  • shortName: whether to aggregate only the base filename rather than the full filepath
  • sort: sort files in each directory in ascending order (defaults to true)

A reverse sort can also be achieved by setting the sort option to 'reverse', 'desc', or 'descending' string value.

examples

// display contents of files in this script's directory 
dir.readFiles(__dirname,
    function(errcontentnext) {
        if (err) throw err;
        console.log('content:', content);
        next();
    },
    function(errfiles){
        if (err) throw err;
        console.log('finished reading files:', files);
    });
 
// match only filenames with a .txt extension and that don't start with a `.´ 
dir.readFiles(__dirname, {
    match: /.txt$/,
    exclude: /^\./
    }, function(errcontentnext) {
        if (err) throw err;
        console.log('content:', content);
        next();
    },
    function(errfiles){
        if (err) throw err;
        console.log('finished reading files:',files);
    });
 
// exclude an array of subdirectory names 
dir.readFiles(__dirname, {
    exclude: ['node_modules', 'test']
    }, function(errcontentnext) {
        if (err) throw err;
        console.log('content:', content);
        next();
    },
    function(errfiles){
        if (err) throw err;
        console.log('finished reading files:',files);
    });
 
 
// the callback for each file can optionally have a filename argument as its 3rd parameter 
// and the finishedCallback argument is optional, e.g. 
dir.readFiles(__dirname, function(errcontentfilenamenext) {
        console.log('processing content of file', filename);
        next();
    });

Asynchronously iterate the files of a directory and its subdirectories and pass an array of file paths to a callback.

dir.files(__dirname, function(errfiles) {
    if (err) throw err;
    console.log(files);
});

Asynchronously iterate the subdirectories of a directory and its subdirectories and pass an array of directory paths to a callback.

dir.subdirs(__dirname, function(errsubdirs) {
    if (err) throw err;
    console.log(subdirs);
});

Asynchronously iterate the subdirectories of a directory and its subdirectories and pass an array of both file and directory paths to a callback.

Separated into two distinct arrays (paths.files and paths.dirs)

dir.paths(__dirname, function(errpaths) {
    if (err) throw err;
    console.log('files:\n',paths.files);
    console.log('subdirs:\n', paths.dirs);
});

Combined in a single array (convenience method for concatenation of the above)

dir.paths(__dirname, true, function(errpaths) {
    if (err) throw err;
    console.log('paths:\n',paths);
});

MIT licensed (See LICENSE.txt)