在Linux操作系统中,文件通配符(也称通配符模式)是日常文件管理与命令行操作中极为实用的工具。借助它们,用户可以用简洁的表达式匹配一组文件名或路径,省去逐一输入名称的繁琐步骤。下面逐一盘点CentOS系统里常见的通配符及其实际用法。
*:匹配零个或多个任意字符。例如执行 ls *.txt 会列出当前目录下所有以 .txt 结尾的文件。
?:匹配任意单个字符。比如 ls file?.txt 能匹配 file1.txt 或 fileA.txt,但无法匹配 file10.txt(因为 ? 仅占一个字符位置)。
~:代表当前用户的 home 目录。直接输入 cd ~ 即可快速返回用户主目录。
~username:切换到指定用户的 home 目录,例如 cd ~john 可进入用户 john 的家目录。
~+:表示当前工作目录,效果等同于 pwd 的输出结果。
~-:表示上一个工作目录,用法与 cd - 类似,便于快速在目录间切换。
[0-9]:匹配数字范围内的任意一个字符,即 0 到 9 均符合条件。
[a-z]:匹配任意一个小写字母。需注意,具体行为可能因文件系统或 locale 设置而异(例如某些系统中 [a-z] 可能包含大写字母),建议结合 LC_COLLATE 环境变量来理解实际匹配行为。
[A-Z]:匹配任意一个大写字母。
[wxc]:匹配方括号中列出的任何一个字符,此处即为 w、x 或 c。
[^wxc]:匹配除了方括号中列出的字符以外的任意字符,即排除 w、x、c 的所有其他字符。
此外,还存在一类功能更强大的字符类,采用 [:class:] 形式表示,使用时必须嵌套在双中括号内,例如 [[:digit:]]。常用字符类包括:
[:digit:]:任意数字,等价于 [0-9]。
[:lower:]:任意小写字母,等价于 [a-z]。
[:upper:]:任意大写字母,等价于 [A-Z]。
[:alpha:]:任意大小写字母(包含大小写)。
[:alnum:]:任意数字或字母(即字母与数字的并集)。
[:blank:]:空格或制表符等水平空白字符。
[:space:]:所有空白字符,包括空格、制表符、换行符等。
[:punct:]:所有标点符号。
[:print:]:可打印字符(包含空格)。
[:cntrl:]:控制字符(非打印字符,如回车、换行等)。
[:graph:]:图形字符(即可打印字符除去空格后的部分)。
[:xdigit:]:十六进制数字,即 0-9、a-f、A-F 的任意一个。
这些通配符与字符类在 Shell 的文件名扩展(globbing)机制中极为常用,熟练掌握后能显著提升命令行下的操作效率与脚本编写速度。若遇到匹配行为与预期不符的情况,请优先检查当前的 locale 设置,并确认是否遗漏了双中括号——这些细节往往是新手容易踩坑的地方。
