Windows 11系统下通配符匹配文件后缀功能失效问题咨询
Windows 11下ls递归通配符匹配失效解决方案
失效原因
ls -R *.txt通配符不生效是Windows环境和类Unix环境的通配符展开逻辑差异导致:
- 原生CMD/PowerShell环境下,
ls是Get-ChildItem的默认别名,直接传入*.txt时,命令只会匹配当前目录下符合后缀规则的文件,不会自动递归到子目录做通配符匹配。 - Git Bash/WSL等模拟类Unix环境下,Windows系统层不会自动为跨目录递归场景做通配符预展开,传入的
*.txt参数只会被解析为当前目录下的匹配规则。
可直接执行的命令
根据你当前使用的终端环境选择对应命令即可,可同时匹配所有.txt后缀文件、以及所有文件名以s1.txt结尾的文件:
PowerShell/CMD 原生终端
Get-ChildItem -Recurse -Include *.txt,*s1.txt
习惯用ls简写的话直接替换命令名即可,效果完全一致:
ls -Recurse -Include *.txt,*s1.txt
Git Bash/WSL 类Unix终端
推荐用find命令做递归匹配,不会出现通配符展开兼容问题:
find . -type f \( -name "*.txt" -o -name "*s1.txt" \)
如果要保留ls的输出格式,可以结合grep过滤结果:
ls -R | grep -E "(\.txt|s1\.txt)$"
排查提示:如果执行命令后结果和预期不符,可以先执行
Get-Alias ls(PowerShell下)或which ls(类Unix终端下)确认当前ls命令映射的实际程序,避免第三方工具别名冲突导致规则不生效。
内容的提问来源于stack exchange,提问作者Brainfuck
相关产品推荐
相关产品推荐

