如何在PowerShell中过滤文件名模式?

时间:2015-06-09 18:27:00

标签: powershell pattern-matching

我需要在Powershell中做类似Unix的ls | grep 'my[rR]egexp?'。类似的表达式ls | Select-String -Pattern 'my[rR]egexp?'似乎通过所列文件的内容,而不是简单地过滤文件名本身。

Select-String文档也没有多大帮助。

2 个答案:

答案 0 :(得分:4)

很简单:

ls | where Name -match 'myregex'

但是还有其他选择:

(ls) -match 'myregex'

或者,根据您的正则表达式的复杂程度,您也可以通过简单的通配符匹配来解决它:

ls wild[ck]ard*.txt

比上述选项更快。如果你可以将它放入没有字符类的通配符匹配中,你也可以使用-Filter参数Get-ChildItemls),它在文件系统级别执行过滤,因此甚至更快。另请注意,PowerShell默认情况下不区分大小写,因此不需要像[rR]这样的字符类。

答案 1 :(得分:1)

在根据@Joey的回答进行研究的同时,我偶然发现了另一种方法(基于Select-String本身):

ls -Name | Select-String -Pattern 'my[Rr]egexp?'

-Name参数似乎使ls将结果作为普通字符串而不是FileInfo对象返回,因此Select-String将其视为要搜索的字符串而不是列表要搜索的文件。