在macOS系统中,通配符“*”可以匹配哪些字符?
美国、香港服务器
在macOS系统中,通配符“*”可以匹配哪些字符?
09-16 来源:
在 macOS 系统的终端中,通配符 * 是最常用的 “全局匹配通配符”,其匹配规则由终端默认使用的 Shell(默认是 zsh,旧版 macOS 是 bash) 定义,核心功能是匹配任意长度的任意字符(包括 0 个字符),但默认不匹配以点(.)开头的隐藏文件 / 目录。
一、* 的核心匹配范围
匹配 “任意字符”
包括字母(大小写)、数字、符号(如 -、_、=、空格等),无字符类型限制。
示例:
输入 ls doc*,会匹配当前目录下所有以 doc 开头的文件 / 目录,比如 document.txt、doc_2024.pdf、doc folder(含空格的名称)。
输入 ls *.jpg,会匹配当前目录下所有以 .jpg 结尾的文件,比如 photo.jpg、123_avatar.jpg。
匹配 “任意长度”
可匹配 0 个字符(即 “空匹配”)、1 个字符或多个字符。
示例:
输入 ls a*b,会匹配 ab(0 个中间字符)、acb(1 个中间字符)、a123b(多个中间字符)。
输入 ls *test*,会匹配所有名称中包含 test 的文件 / 目录,比如 test.txt(开头匹配)、my_test.doc(中间匹配)、final_test(结尾匹配)。
默认不匹配 “隐藏文件 / 目录”
macOS 中以 . 开头的文件 / 目录视为 “隐藏项”(如 .bashrc、.git 目录),* 默认不会匹配这类文件,需额外处理(见下文 “特殊场景”)。
示例:
输入 ls *.txt,不会匹配隐藏文件 .notes.txt;
输入 ls .*,才会匹配所有隐藏文件 / 目录(. 开头 + 任意字符)。
二、* 的特殊匹配场景
1. 匹配含空格的文件 / 目录
* 会自动识别含空格的名称(无需额外转义),因为 Shell 会先解析通配符,再处理空格。
示例:
输入 ls report*,会匹配 report 2024.pdf(名称含空格)、report_final.docx。
2. 限制匹配 “特定目录下的内容”
若需在指定目录下使用 *,只需在路径后加 *,即可匹配该目录下的所有内容(或特定类型)。
示例:
输入 ls ~/Documents/*.pdf,匹配「用户文档目录(~/Documents)」下所有 .pdf 文件;
输入 ls /Applications/*App,匹配「应用程序目录」下所有以 App 结尾的应用(如 TextEdit.app、Preview.app)。
3. 匹配 “子目录中的内容”(递归匹配)
默认情况下,* 仅匹配 “当前目录(或指定目录)下的直接内容”,不包含子目录内的文件。若需递归匹配子目录中的内容,需结合命令的递归参数(如 ls -R、find)。
示例:
输入 ls -R ~/Pictures/*.png,递归列出「图片目录」及其所有子目录下的 .png 文件;
输入 find ~/Downloads -name "*.zip"(find 命令的 name 参数支持 *),递归查找「下载目录」下所有 .zip 文件。
4. 强制匹配 “隐藏文件”
若需用 * 匹配隐藏文件,需明确包含 . 前缀。
示例:
输入 ls .*.conf,匹配所有以 .conf 结尾的隐藏配置文件(如 .nginx.conf、.gitconfig);
输入 ls ~/.*,匹配用户主目录下所有隐藏文件 / 目录(如 .bash_profile、.ssh)。
三、注意:* 的匹配边界(避免误解)
不跨目录匹配:* 仅匹配 “同一层级” 的名称,无法跨越 /(目录分隔符)。例如 ls /User/*/Documents 中,* 仅匹配 /User 下的用户目录(如 john、jane),无法直接匹配 /User/john/Documents 下的文件。
Shell 先解析通配符:终端会先将 * 解析为具体的文件 / 目录列表,再执行命令。例如 rm *.tmp 中,*.tmp 会先被替换为所有 .tmp 文件的名称,再执行删除操作。
综上,macOS 终端中 * 的核心作用是 “灵活匹配任意非隐藏内容”,结合路径、命令参数(如 -R)或前缀 .,可覆盖绝大多数文件 / 目录筛选场景。
三二互联专业提供香港VPS,美国VPS主机,香港云服务器租用等业务香港美国到大陆CN2 GIA速度最快