以下内容翻译自fs-finder模块官方文档

finder文件系统由Nette framework中的finder项目启发产生

安装 Installing

1
$ npm install fs-finder

查找 Searching

有两种查找文件或目录的方法:同步异步

同步

在某个目录下查找

1
2
var Finder = require('fs-finder');
var files = Finder.in('/var/data/base-path').findFiles(); // returns array with file's names

查找目录

1
var directories = Finder.in(baseDir).findDirectories();     // returns array with directories's names

同时查找目录和文件

1
var paths = Finder.in(baseDir).find();      // returns array with file's and directories's names

异步

如果fs-finder在find*方法中的参数为回调函数,会自动使用异步查找

在某个目录下查找

1
2
3
Finder.in('/var/data/base-path').findFiles(function(files) {
console.log(files);
});

查找目录

1
2
3
Finder.in(baseDir).findDirectories(function(directories) {
console.log(directories);
});

同时查找文件和目录

1
2
3
var paths = Finder.in(baseDir).find(function(paths) {
console.log(paths);
});

递归查找 Recursive searching

1
var paths = Finder.from(baseDir).find();

路径掩模 Path mask

1
var files = Finder.from(baseDir).findFiles('*.coffee');

异步方法:

1
var files = Finder.from(baseDir).findFiles('*.coffee');

在这个示例中fs-finder会查询baseDir中满足’*.coffee’的所有文件。*号仅仅只是正则表达式’[0-9a-zA-Z/.-_]+’的简写,因此你可以在参数中使用正则。

需要注意的是,正则表达式需要包含在<>中

1
var files = Finder.from(baseDir).findFiles('temp/<[0-9]+>.tmp');        // files in temp directories with numbers in name and .tmp extension

排除 Excluding

排除文件或文件夹时能够使用和路径掩模相同的技巧

1
var files = Finder.from(baseDir).exclude(['/.git']).findFiles();

过滤器 Filters

根据文件大小过滤

1
var files = Finder.from(baseDir).size('>=', 450).size('<=' 500).findFiles();

返回所有大小在450B到500B之间的文件。

根据修改时间过滤

1
var files = Finder.from(baseDir).date('>', {minutes: 10}).date('<', {minutes: 1}).findFiles();

通用过滤器

1
2
3
4
5
6
7
8
9
var filter = function(stat, path) {
if ((new Date).getMinutes() === 42) {
return true;
} else {
return false;
}
});

var files = Finder.from(baseDir).filter(filter).findFiles();

如果当前时间是某小时42分,返回所有的文件。通用过滤器是一个参数为文件对象和文件名的异步函数。

系统和模板文件 System and temp files

默认情况下,fs-finder会忽略系统和模板文件,例如由编辑器创建的模板文件。fs-finder还会忽略行末的~符号和开头的.符号。

1
var files = Finder.in(dir).showSystemFiles().findFiles()

在父级目录下查找 Look in parent directories

finder也能够在父级目录下查找文件。lookUp方法包含了exclude方法,如果你使用了from方法,当前目录中你已经查找过的文件将不会在递归遍历父级目录时被再次查找。

1
2
3
4
5
6
7
var files = Finder.in(dir).lookUp().findFiles('5.log');

// set depth with number of parent directories
var files = Finder.in(dir).lookUp(3).findFiles('5.log');


// set depth with path to top directory
var files = Finder.in(dir).lookUp('/var/stop/here').findFiles('5.log');

优先查找 Find first

当你想要找到第一个匹配的文件或目录时,你可以使用findFirst选项。使用这个方法时,fs-finder不会递归查找每一个目录,而是在找到第一个匹配路径后就停止查找。
如果没有找到匹配的路径,返回null。

1
var file = Finder.from(dir).findFirst().findFiles('<[0-9]{2}>');

简写形式为:

1
var file = Finder.from(dir).findFile('<[0-9]{2}>');

或者:

1
var directory = Finder.from(dir).findDirectory();