123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- var fs = require('fs');
- var common = require('./common');
- var _ls = require('./ls');
-
- //@
- //@ ### find(path [,path ...])
- //@ ### find(path_array)
- //@ Examples:
- //@
- //@ ```javascript
- //@ find('src', 'lib');
- //@ find(['src', 'lib']); // same as above
- //@ find('.').filter(function(file) { return file.match(/\.js$/); });
- //@ ```
- //@
- //@ Returns array of all files (however deep) in the given paths.
- //@
- //@ The main difference from `ls('-R', path)` is that the resulting file names
- //@ include the base directories, e.g. `lib/resources/file1` instead of just `file1`.
- function _find(options, paths) {
- if (!paths)
- common.error('no path specified');
- else if (typeof paths === 'object')
- paths = paths; // assume array
- else if (typeof paths === 'string')
- paths = [].slice.call(arguments, 1);
-
- var list = [];
-
- function pushFile(file) {
- if (common.platform === 'win')
- file = file.replace(/\\/g, '/');
- list.push(file);
- }
-
- // why not simply do ls('-R', paths)? because the output wouldn't give the base dirs
- // to get the base dir in the output, we need instead ls('-R', 'dir/*') for every directory
-
- paths.forEach(function(file) {
- pushFile(file);
-
- if (fs.statSync(file).isDirectory()) {
- _ls('-RA', file+'/*').forEach(function(subfile) {
- pushFile(subfile);
- });
- }
- });
-
- return list;
- }
- module.exports = _find;
|