Linux下如何删除文件名全为大写的文件?
删除目录下所有全大写文件名的文件
这里有几种可靠的方法来搞定这个需求,先从最通用的方案说起,它几乎在所有类Unix系统的shell环境下都能稳定工作:
方法1:使用find命令(跨shell通用)
这个命令会精准匹配当前目录下所有文件名完全由大写字母组成的普通文件,然后批量删除它们:
find . -maxdepth 1 -type f -regex "./[[:upper:]]+" -exec rm {} +
-maxdepth 1:限制仅查找当前目录,不会递归进入子目录,避免误删深层文件-type f:只匹配普通文件,跳过目录、链接等特殊文件-regex "./[[:upper:]]+":用正则表达式匹配完整路径(当前目录下的文件路径格式是./文件名),确保文件名部分全由大写字母组成([[:upper:]]+表示一个或多个大写字符)-exec rm {} +:把匹配到的文件批量传给rm执行删除,比逐个删除效率更高
安全测试建议
在实际执行删除操作前,强烈建议把rm换成echo,先确认哪些文件会被选中,避免误删:
find . -maxdepth 1 -type f -regex "./[[:upper:]]+" -exec echo {} +
方法2:Bash下的扩展glob(更简洁)
如果你用的是Bash shell,可以开启扩展glob特性,用更简短的命令实现:
shopt -s extglob rm +([[:upper:]])
shopt -s extglob:开启Bash的扩展glob功能,让我们可以用+()语法匹配一个或多个指定字符+([[:upper:]]):直接匹配完全由一个或多个大写字母组成的文件名
同样,测试时可以换成:
shopt -s extglob echo +([[:upper:]])
关键注意事项
- 避免用
[A-Z]来匹配大写字母:部分系统的locale设置会让[A-Z]包含部分小写字母,一定要用[[:upper:]]这个POSIX标准字符类,它能精准匹配所有大写字母 - 如果全大写文件名包含空格、引号等特殊字符,上面的两种方法都能正确处理,无需额外转义
内容的提问来源于stack exchange,提问作者user11914512
相关产品推荐
相关产品推荐

