On Friday, 30 November 2012 at 06:29:01 UTC, Joshua Niehus wrote:
I think if you go breadth first, you can filter out the
unwanted directories before it delves into them
oh wait... it probably still looks through all those dir's.
What about this?
import std.algorithm, std.regex, std.stdio, std.file;
import std.parallelism;
DirEntry[] prune(string path, ref DirEntry[] files)
{
auto exclude = regex(r"\.git|\.DS_Store", "g");
foreach(_path; taskPool.parallel(dirEntries(path,
SpanMode.shallow)
.filter!(a => match(a.name, exclude).empty)))
{
files ~= _path;
if (isDir(_path.name)) { prune(_path.name, files); }
}
return files;
}
void main()
{
DirEntry[] files;
prune("/path", files);
foreach(file;files) { writeln(file.name); }
}