You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Linux通配符(*)在mkdir命令中无法正常工作?

Linux通配符在mkdir等命令中失效的问题

问题场景

终端操作记录如下:

[trainee@esem-linux-jump ~]$ ls
mydir
[trainee@esem-linux-jump ~]$ ls my*
list1  list2 shell_code
[trainee@esem-linux-jump ~]$ mkdir my*/abc
mkdir: cannot create directory ‘my*/abc’: No such file or directory
[trainee@esem-linux-jump ~]$ rmdir my*/shel*
[trainee@esem-linux-jump ~]$ ls my*
list1  list2

可见ls、rmdir能正常解析my*通配符,但mkdir却报错无法识别。

原因分析

核心问题在于对shell通配符匹配逻辑的误解:

  • 执行ls my*时,shell会先将my*扩展为当前目录下所有以my开头的文件/目录(此处为mydir),实际执行的是ls mydir,显示的是mydir内部的内容。
  • 执行mkdir my*/abc时,若通配符未被正确扩展,大概率是以下情况:
    1. 目录名含特殊字符(如空格、隐藏字符),导致my*无法完整匹配mydir;
    2. 极少数情况下shell的通配符扩展规则被修改(如开启failglob选项,匹配失败时直接报错而非保留原模式)。

解决方法

  1. 验证通配符匹配结果:先执行echo my*查看shell实际扩展后的内容,确认是否正确匹配到mydir:
    echo my*
    
    若输出为mydir,说明通配符正常,可直接执行mkdir mydir/abc;若输出为my*,则需检查目录名称是否存在特殊字符。
  2. 显式指定路径:避免依赖通配符,直接写出完整路径:
    mkdir mydir/abc
    
  3. 批量创建子目录的正确写法:如果需要给多个my开头的目录创建子目录,用循环实现:
    for dir in my*; do mkdir "$dir"/abc; done
    

内容的提问来源于stack exchange,提问作者Gaurav kumar Khandelwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 21:43:15