Powershell 使用递归全局模式的include和exclude数组选择文件
我得到了JSON中的两个文件glob参数,Powershell 使用递归全局模式的include和exclude数组选择文件,powershell,Powershell,我得到了JSON中的两个文件glob参数,include和exclude,格式如下: { include: ['**/*.md', '**/swagger/*.json', '**/*.yml', 'somedir/*.yml'], exclude: ['**/obj/**', 'otherdir/**', '**/includes/**'] } 我的任务是遍历目录树,根据这些格式中的包含和排除规则选择文件;这必须作为Powershell脚本编写 我一直在试图找到一个支持双星号
include
和exclude
,格式如下:
{
include: ['**/*.md', '**/swagger/*.json', '**/*.yml', 'somedir/*.yml'],
exclude: ['**/obj/**', 'otherdir/**', '**/includes/**']
}
我的任务是遍历目录树,根据这些格式中的包含和排除规则选择文件;这必须作为Powershell脚本编写
我一直在试图找到一个支持双星号递归文件glob模式的内置命令;此外,由于Powershell正在将JSON转换为对象,因此如果命令参数可以接受数组作为输入就更好了
我已经看过了Get ChildItem
,但我不确定是否可以使用-include
、-exclude
和/或-filter
模拟全局分辨率行为。我还研究了解析路径
,但我不确定通配符是否能正常工作(我可能需要手动排除路径)
如何使用Powershell中的多个递归通配符文件全局选择路径,同时排除其他全局?是否有支持此功能的Powershell命令
谢谢大家!
编辑:
在这些全局模式中,单个星号是一个常规通配符。然而,双星号(**)是一个已知的标准,表示递归目录搜索
例如:模式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文件夹中找到的任何内容,无论其深度有多深”。@Bill\u Stewart双星号(**
)是一个已知的标准;它表示递归目录搜索。例如,模式dir1/*/file.txt
将匹配dir1/dir2/file.txt
和dir1/dir3/file.txt
,但不匹配dir1/dir2/dir3/file.txt
。模式dir1/**/file.txt
将匹配dir1/dir2/file.txt
,/dir1/dir3/dir4/file.txt
,dir1/dir7/dir9/dir23/dir47/file.txt
,等等。单星号只是一个普通的通配符。@Bill_Stewart我在问题中添加了这个解释。PowerShell的文件选择和通配符匹配工作原理如文档页面所述;实现其他行为需要在代码中进行设计。听起来像是一个有趣的项目,你可以在完成后提供。