匹配所有不以下划线开头的文件而忽略以下划线开头的目录中的文件的 glob 模式是什么?

What is the glob pattern matching all files that don't start with an underscore ignoring those in directories that start with an underscore?

给定目录结构:

a/
  b/
    _private/
      notes.txt
    c/
      _3.txt
      1.txt
      2.txt
    d/
      4.txt
    5.txt

如何编写选择以下路径的 glob 模式(与 npm 模块 glob 兼容)?

a/b/c/1.txt
a/b/c/2.txt
a/b/d/4.txt
a/b/5.txt

这是我尝试过的:

// Find matching file paths inside "a/b/"...
glob("a/b/[!_]**/[!_]*", (err, paths) => {
    console.log(paths);
});

但这只会发出:

a/b/c/1.txt
a/b/c/2.txt
a/b/d/4.txt

经过反复试验(以及 grunt (minimatch/glob) folder exclusion 的帮助),我发现以下似乎可以实现我正在寻找的结果:

// Find matching file paths inside "a/b/"...
glob("a/b/**/*", {
    ignore: [
        "**/_*",        // Exclude files starting with '_'.
        "**/_*/**"  // Exclude entire directories starting with '_'.
    ]
}, (err, paths) => {
    console.log(paths);
});