Node.js中的fs-finder模块
以下内容翻译自fs-finder模块官方文档
finder文件系统由Nette framework中的finder项目启发产生
安装 Installing
1 | $ npm install fs-finder |
查找 Searching
有两种查找文件或目录的方法:同步和异步
同步
在某个目录下查找1
2var 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
3Finder.in('/var/data/base-path').findFiles(function(files) {
console.log(files);
});
查找目录1
2
3Finder.in(baseDir).findDirectories(function(directories) {
console.log(directories);
});
同时查找文件和目录1
2
3var 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
9var 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
7var 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();