如果我有这样的文件夹:
dir:
├── 1.index1.html
├── 2.index2.html
├── 3.index3.html
├── a
│ ├── 1.index1.html
│
如何ripgrep
在命令中告诉仅排除index1.html
根文件夹中的文件,但仍搜索index1.html
in 文件夹a
?
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
在其指南中提供了有关该标志的更多详细信息。