| 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; |