我已经在JSON include
和exclude
中获得了两个文件glob参数,格式如下:
{
include: ['**/*.md', '**/swagger/*.json', '**/*.yml', 'somedir/*.yml'],
exclude: ['**/obj/**', 'otherdir/**', '**/includes/**']
}
我的任务是走一个目录树,根据这些格式的包含和排除规则选择文件;这必须写成Powershell脚本。
我一直在努力寻找支持双星号,递归文件glob模式的内置命令;另外,由于Powershell正在将JSON转换为对象,如果命令参数可以接受数组作为输入,那将是很好的。
我查看了Get-ChildItem
,但我不确定我是否可以使用-include
,-exclude
和/或-filter
模仿全局解析行为。我也查看了Resolve-Path
,但我不确定通配符是否能正常工作(我可能需要手动排除路径)。
如何在Powershell中使用多个递归通配符文件globs选择路径,同时排除其他globs?是否有支持此功能的Powershell命令?
谢谢!
修改 在这些glob模式中,单个星号是常规通配符。但是,双星号(**)是一种已知标准,表示递归目录搜索。
例如:模式dir1/*/file.txt
将匹配:
dir1/dir2/file.txt
dir1/dir3/file.txt
......但不是:
dir1/dir2/dir3/file.txt
模式dir1 / ** / file.txt会匹配上面的选择器所有的东西,但它也会匹配:
dir1/dir3/dir4/file.txt
dir1/dir7/dir9/dir23/dir47/file.txt
等等。因此,像**/obj/**
这样的排除glob模式基本上意味着“排除在目录层次结构中任何位置找到的任何obj文件夹中找到的任何内容,无论多深”。