如何用PowerShell实现Bash中`ls | grep foo.sh`的文件名过滤功能?
实现PowerShell中类似
ls | grep "foo.sh"的文件名匹配功能 要在PowerShell中筛选文件名包含指定内容的文件,无需搜索文件内容,直接针对文件名过滤即可,以下是几种实用方法:
方法1:直接使用Get-ChildItem的通配符参数
Get-ChildItem本身支持通配符匹配文件名,这是最简洁的方式:
- 匹配名称中包含
foo.sh的文件(显示完整文件信息):Get-ChildItem "*foo.sh*" - 只输出匹配的文件名(不显示其他属性):
Get-ChildItem -Name "*foo.sh*" - 精确匹配名为
foo.sh的文件:Get-ChildItem "foo.sh"
方法2:通过管道结合Where-Object过滤
如果需要更灵活的匹配(比如正则表达式),可以用Where-Object对文件对象的Name属性进行过滤:
- 正则匹配文件名:
Get-ChildItem | Where-Object { $_.Name -match "foo.sh" } - 通配符匹配(和方法1的通配符逻辑一致):
Get-ChildItem | Where-Object { $_.Name -like "*foo.sh*" }
补充说明
你之前用Select-String会搜索文件内容,是因为这个命令的作用就是在文件内容中查找匹配字符串,而非针对文件名筛选。
内容的提问来源于stack exchange,提问作者E.rick
相关产品推荐
相关产品推荐

