mkdir -p 可一次性创建多级目录且自动跳过已存在路径,支持大括号批量生成规则化子目录,但含空格、中文等特殊字符时需配合 while 循环逐行处理。

用 mkdir -p 一次性建好项目部署目录,是运维和开发中最常用也最稳妥的操作。它不依赖上级是否存在,自动补全整条路径,已存在的目录直接跳过,不会报错也不会覆盖。
一条命令搭起标准部署骨架
多数服务部署需要固定结构,比如:
-
deploy/{bin,etc,logs,shared}—— 二进制、配置、日志、共享数据分离 -
app/{backend/{src,config,tests},frontend/public}—— 前后端分治,层级清晰 -
project/src/main/{java,resources}/com/example/app—— Java 标准包路径
直接执行即可,所有中间目录(如 deploy、deploy/etc)全部自动创建:
mkdir -p deploy/{bin,etc,logs,shared}
批量生成带规律的子目录
大括号展开适合命名规则统一、无空格、无特殊字符的场景:
- 按年月建日志目录:
mkdir -p logs/{2024,2025,2026}/{01,02,03} - 多环境配置:
mkdir -p config/{dev,staging,prod} - 版本化应用目录:
mkdir -p app/v{1,2,3}/{bin,lib}
注意:大括号内不能有空格,{dev, staging} 会生成名为 staging(带前导空格)的异常目录。
安全处理含空格或中文的路径
如果目录名含空格、括号、中文或 $ 符号(如 user data、config (backup)、日志备份),大括号展开不可靠,必须逐行读取:
先准备 dirs.txt,每行一个完整路径(可带引号,也可不带):
user data/config<br>config (backup)/v2<br>日志备份/2026-05
再执行:
while IFS= read -r dir; do mkdir -p "$dir"; done
IFS= 防止行首尾空格被截断,-r 防止反斜杠被误解析——这两个参数缺一不可。
显式设权限,避免 umask 干扰
不加 -m 时,权限由当前 shell 的 umask 决定,CI/CD 和本地环境常不一致。需确定权限就必须加 -m,且必须写在 -p 后面:
-
mkdir -p -m 755 deploy/{bin,etc}→ 所有新建目录为rwxr-xr-x -
mkdir -p -m 700 .cache/private→ 仅属主可读写执行 -
mkdir -p -m 644 docs/index.html→ 注意:-m 对文件无效,只影响目录;若要建文件,需配合touch
权限数字按“所有者/组/其他”三位设定,常见组合:755(公开可读)、700(私有)、644(普通文件)。
加 -v 查看过程,方便验证和排错
加上 -v 参数能实时输出实际创建的每一级目录,特别适合检查路径是否按预期展开:
mkdir -pv app/{backend/{src,tests},frontend/public}
输出类似:
mkdir: created directory 'app/backend'<br>mkdir: created directory 'app/backend/src'<br>mkdir: created directory 'app/backend/tests'<br>mkdir: created directory 'app/frontend'<br>mkdir: created directory 'app/frontend/public'
已存在的目录不会显示,便于确认哪些是本次新建的。











