使用include和exclude数组递归glob模式选择文件

时间:2017-11-03 20:10:26

标签: powershell

我已经在JSON includeexclude中获得了两个文件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文件夹中找到的任何内容,无论多深”。

0 个答案:

没有答案