例如,我有一个像这样的字符串 *.{jpg,png}
,但该字符串也可以只是 *.scss
- 实际上它是一个 editorconfig .
然后我想搜索我的 git 存储库跟踪的这个扩展的每个文件。
我尝试了几种方法,但没有找到任何足够的解决方案。
我得到的最接近的是:
git ls-tree -r master --name-only | grep -E ".*\.jpg"
但这只适用于单个文件扩展名,不适用于这样的东西 git ls-tree -r master --name-only | grep -E ".*\.{jpg,png}"
.
谁能帮帮我?
最佳答案
试试这个:
git ls-tree -r master --name-only | grep -E '.*\.(jpg|png)'
您尝试通过 -E
选项传递的表达式被解释为任何字符 (.*
)、点 (\.
) , 和字符串 {jpg,png}
。我猜你混淆了 Bash brace expansion与 alternation (|
) 在正则表达式中 group (括号)。
考虑使用行尾 anchor :'.*\.(jpg|png)$'
。
没有grep
正如 @0andriy 所指出的,您可以将模式传递给 git ls-files
,如下所示:
git ls-files '*.jpg' '*.png'
请注意,您应该转义参数以防止 filename expansion (通配符)。特别是 asterisk (*
) character
matches any number of repeats of the character string or RE preceding it, including zero instances.
但这显然只适用于简单的 git patterns .对于稍微复杂的情况,例如“从给定集中匹配 N 个字符的扩展名”,您将需要一个正则表达式(例如 grep)。
关于regex - 按扩展名在 git 存储库中搜索文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41612469/