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

Reply via email to