Ripgrep 仅排除文件夹根目录中的文件

Ripgrep to only exclude a file in the root of the folder

如果我有这样的文件夹:

dir:
    ├── 1.index1.html
    ├── 2.index2.html
    ├── 3.index3.html
    ├── a
    │   ├── 1.index1.html
    │   

如何在命令中告诉 ripgrep 仅排除根文件夹中的文件 index1.html,但仍在搜索文件夹 a 中的 index1.html

ripgrep 对此提供支持,无论您的 shell 支持哪种 globbing 语法,因为它的支持独立于 shell.

ripgrep 的 -g/--glob 标志允许您包含或排除文件。特别是,它遵循 gitignore 使用的相同语义(参见 man gitignore)。这意味着如果你以 / 开始一个 glob 模式,那么它只会匹配相对于 ripgrep 所在位置的特定路径 运行ning。例如:

$ tree
.
├── a
│   └── index1.html
├── index1.html
├── index2.html
└── index3.html

1 directory, 4 files

$ rg --files
index1.html
a/index1.html
index2.html
index3.html

$ rg --files -g '!index1.html'
index2.html
index3.html

$ rg --files -g '!/index1.html'
index2.html
index3.html
a/index1.html

当使用 -g 标志时,! 意味着忽略匹配该模式的文件。当我们 运行 rg --files -g '!index1.html' 时,将导致忽略 所有 个名为 index1.html 的文件。但是如果我们使用!/index1.html,那么它只会忽略top-level index1.html。同样,如果我们使用 !/a/index1.html,那么它只会忽略该文件:

$ rg --files -g '!/a/index1.html'
index1.html
index2.html
index3.html

ripgrep 在其 guide.

中有关于 -g/--glob 标志的更多详细信息