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
标志的更多详细信息
如果我有这样的文件夹:
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
标志的更多详细信息