3

如果我有这样的文件夹:

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

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

4

1 回答 1

6

ripgrep 支持这一点,不管你的 shell 支持什么语法,因为它的支持独立于 shell。

ripgrep 的-g/--glob标志允许您包含或排除文件。特别是,它遵循 gitignore 使用的相同语义(请参阅 参考资料man gitignore)。这意味着如果您使用 启动 glob 模式/,那么它将仅匹配相对于 ripgrep 运行位置的特定路径。例如:

$ 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,那么它只会忽略顶层index1.html。同样,如果我们使用!/a/index1.html,那么它只会忽略该文件:

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

ripgrep-g/--glob在其指南中提供了有关该标志的更多详细信息。

于 2020-10-16T13:03:07.990 回答