如何使用glob匹配目录下无文件扩展名的文件
匹配固定开头、无扩展名文件的glob实现方案
Python 环境实现
直接用glob加简单过滤就能100%精准拿到目标文件,不会误抓带扩展名的同前缀文件:
import glob import os # 把下面的fixed_prefix替换成你这批文件共同的开头单词即可 match_pattern = "./fixed_prefix*" # 先拿所有同前缀文件,再过滤掉文件夹、带扩展名的项 result = [ file_path for file_path in glob.glob(match_pattern) if os.path.isfile(file_path) and os.path.splitext(file_path)[1] == "" ]
代码里加os.path.isfile判断是为了排除同名文件夹,os.path.splitext会自动拆分文件名和扩展名,返回的扩展名部分为空就说明文件没有任何后缀,哪怕文件名中间带.(比如fixed_prefix_2024.v2)也不会误判,只有最后一个.后的内容才会被识别为扩展名。
如果确定当前目录下没有同前缀的带后缀文件、也没有同名文件夹,可以直接简化成glob.glob("./fixed_prefix*"),不需要额外过滤。
Shell 命令行环境实现
如果是在终端里用glob做匹配,Bash/Zsh 下可以直接用下面的规则匹配:
- 仅列出所有符合要求的文件:
ls fixed_prefix!(*.*) - 如果需要给这批文件批量补上.txt后缀,可以直接执行循环:
# 先开启extglob支持,部分环境默认没开需要先执行这行 shopt -s extglob for file in fixed_prefix!(*.*) do if [ -f "$file" ]; then mv "$file" "$file.txt" fi done
提示:如果是Fish shell,匹配规则要写成
fixed_prefix*,加个判断过滤带.的文件即可,语法和Bash略有区别。
内容的提问来源于stack exchange,提问作者user13826158
相关产品推荐
相关产品推荐

