如何找到所有的.git\config文件?

3
我正在尝试查找所有的.git\config文件,但我无法弄清如何操作。
当我只使用\.git作为模式时,它会找到所有目录。
Get-ChildItem -Path C:\Repositories -Recurse -Hidden |
    Where-Object { 
        $_.FullName -match '\.git'
    } |
    Select-Object FullName

但是当我将其扩展为\.git\\config$,只想得到config文件时,它却没有返回任何结果:

Get-ChildItem -Path C:\Repositories -Recurse -Hidden |
    Where-Object { 
        $_.FullName -match '\.git\\config$'
    } |
    Select-Object FullName

我在这里缺少什么?是因为config文件没有扩展名吗?

我正在使用PowerShell 5.1。


1
你的正则表达式没问题,我想 - https://regexr.com/3ous1 - 你确定 $_.FullName 包含完整的文件路径吗?将它们输出并确保你正在匹配你认为的内容。 - Bananaapple
@Bananaapple,这是因为当我只使用config作为模式时,它会找到所有的app.config和其他包含此单词的路径,但它不会递归隐藏目录。当我添加-Hidden时,它仅搜索隐藏目录,就好像它是互斥的,要么这个要么那个。但由于只有.git是隐藏的,而config不是,所以它似乎停留在文件夹级别 :-| - t3chb0t
1个回答

4

config不是一个隐藏文件,因此仅显示隐藏文件会导致它被忽略。

Get-ChildItem -Recurse -Force | where-object fullname -match '\.git\\config'

太好了,Force,他们不能把它命名为“所有”或“全部”吗?人们可以徒劳地搜寻 :-\ - t3chb0t
同意。就我个人而言,我认为让 Get- 命令根据它们的属性隐藏任意内容与 PowerShell 的设计背道而驰 - 在哪里还需要添加一个参数“不要欺骗我有关存在的事物”? - TessellatingHeckler
1
这也将匹配目录,而不仅仅是文件。我可以建议包括一个-File,并且在此过程中,也使用本地筛选而不是将所有条目提供给管道? Get-ChildItem . -Include config -File -Recurse -Force | where { $_.DirectoryName.EndsWith(".git") } - TToni
@TToni,你提出的版本会打开错误的文件,比如libgit2\tests\resources\bad_tag.git\config,这是由于'endswith'测试的原因。而且Get-ChildItem -Include非常容易出现问题,我尽可能避免使用它。它的行为与Get-ChildItem -Path config -recurse相同,因为“Include限定了路径组件”,我觉得这总是不可预测的。 - TessellatingHeckler
在我看来,Get-ChildItem 不会随意隐藏任何东西。除非你明确要求它们(因此,你需要使用 -Force 参数枚举所有项目),否则 HiddenSystem 文件通常不会包含在枚举中。 - Bill_Stewart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接