fs-walker
v1.0.0
Published
Recursively walk through the filesystem, searching for files and directories, either async or synchronous while optionally filtering.
Downloads
160
Maintainers
Readme
Recursively walk through the filesystem, searching for files and directories, either async or synchronous while optionally filtering.
The walker will always respond with an fs_stats
instances, retrieved using lstat and decorated with extra properties:
- directory
- name
- fullname (which is a concatenation of directory and name)
#Installation Install using npm:
npm install --save fs-walker
Then require:
var walk = require('fs-walker');
#Usage
node-fs-walker comes in three flavours:
- Async
- Sync
- Events
The first two flavours both can walk through three options:
- files
- directories
- both
The third flavour has the following events defined, depending on the type found:
- file
- dir
- block
- character
- symbolic
- fifo
- socket
- unknown
##Initial
The following samples all use this setup:
var dir = process.cwd(),
walk = require('fs-walker');
##Async
###Files
walk(dir, function(stats) {
console.log(stats.fullname);
});
note: walk is a shortcut for walk.files, so the following works as well. This will make more sense in the other samples.
walk.files(dir, function(stats) {
console.log(stats.fullname);
});
###Directories
walk.directories(dir, function(stats) {
console.log(stats.fullname);
});
###Both
walk.all(dir, function(stats) {
console.log(stats.fullname);
});
##Sync
All the above handlers have a synchronous variant, which maps with the async callers.
- walk.sync or walk.files.sync
- walk.directories.sync
- walk.all.sync
These return an array of fs_stats
instances instead.
##Events
note: Under the hood, the async walker will be used.
var walker = new walk.Walker(dir);
walker.on('file', function(stats) {
console.log('file event: %s', stats.fullname);
})
.on('dir', function(stats) {
console.log('dir event: %s', stats.fullname);
})
.walk();
##Filters
It is possible to filter both files and directories. The filter also receives an fs_stats
instance.
The filter looks as follows:
var filter = {
file: function(stats) {
return /\.js$/i.test(stats.name);
},
directory: function(stats) {
return stats.name !== 'node_modules';
}
};
This filter will make it so that only files are returned that end in .js
and will not be looking in the node_modules
folder while walking the file-system.
It is possible to omit the file
, directory
or both filters, e.g.:
var filter = {
directory: function(stats) {
return stats.name !== 'node_modules';
}
};
The filter handler is picked based on fs_stats
's isDirectory()
.
Using the filter is done by passing it as the second argument, as follows:
###Async
walk(dir, filter, function(stats) {
console.log(stats.fullname);
});
###Sync
walk.sync(dir, filter).forEach(function(stats) {
console.log(stats.fullname);
});
###Events
var walker = new walk.Walker(dir);
walker.on('file', function(stats) {
console.log('file event: %s', stats.fullname);
})
.on('dir', function(stats) {
console.log('dir event: %s', stats.fullname);
})
.walk(filter);