Thread overview
Can I skip sub directories with file.dirEntries() ?
Sep 27, 2017
Ky-Anh Huynh
Sep 27, 2017
Nicholas Wilson
Sep 27, 2017
Ky-Anh Huynh
September 27, 2017
Hi,

Can I have a `break` option when using `dirEntries()`  (similar to `break` in a loop)? I want to study sub-directories but if any sub-directory matches my criteria I don't to look further into their subdirectories

```
  <working-dir>
     A/   -> matches criteria, stop here, go to next directory (B)
     B/   -> doesn't match criteria, will look at its sub-directories (BX, BY,...)
       BX
       BY
```

Thanks a lot
September 27, 2017
On Wednesday, 27 September 2017 at 09:00:55 UTC, Ky-Anh Huynh wrote:
> Hi,
>
> Can I have a `break` option when using `dirEntries()`  (similar to `break` in a loop)? I want to study sub-directories but if any sub-directory matches my criteria I don't to look further into their subdirectories
>
> ```
>   <working-dir>
>      A/   -> matches criteria, stop here, go to next directory (B)
>      B/   -> doesn't match criteria, will look at its sub-directories (BX, BY,...)
>        BX
>        BY
> ```
>
> Thanks a lot

I'd just use dirEntries with SpanMode.shallow in combination with filter either in a loop or a recursive function like below.

void foo(string path = "path")
{
    foreach(e; dirEntries(path,SpanMode.shallow).filter!(myCritreia(paramters)))
    {
        if (e. isDir)
            foo(e.name); // recurse
        // do other stuff
    }
}

you will loop over all subdirs of "path" that satisfy `myCritreia`.
September 27, 2017
On Wednesday, 27 September 2017 at 10:05:34 UTC, Nicholas Wilson wrote:

>
> I'd just use dirEntries with SpanMode.shallow in combination with filter either in a loop or a recursive function like below.
>
> void foo(string path = "path")
> {
>     foreach(e; dirEntries(path,SpanMode.shallow).filter!(myCritreia(paramters)))
>     {
>         if (e. isDir)
>             foo(e.name); // recurse
>         // do other stuff
>     }
> }
>
> you will loop over all subdirs of "path" that satisfy `myCritreia`.

Thank you Nicolas. It's a good idea.

PS: With Linux find command, the thing can be done easily with `-prune` option:

```
find . -iname node_modules -prune
```

Without `-prune` option, there are a lot of unnecessary sub directories...