mkdir -p 是递归创建多级目录的核心命令,自动补全路径、静默跳过已存在目录;支持大括号批量生成并列结构、-m 设置权限、-v 显示创建过程,是部署项目目录结构最高效稳妥的方式。

用 mkdir -p 递归创建多级嵌套目录,是部署复杂项目结构最高效、最稳妥的方式。它不依赖上级目录是否存在,自动补全整条路径,且对已存在目录静默跳过,不会报错或覆盖。
一条命令建完整路径
面对标准项目结构(如 Java 的 src/main/java/com/example/app 或 Go 的 cmd/api internal/pkg web/static),直接执行:
mkdir -p src/main/java/com/example/appmkdir -p cmd/api internal/pkg web/static
所有中间层级(src、src/main、src/main/java……)都会被自动创建。哪怕当前是空目录,也不需要提前 mkdir src 再 mkdir src/main。
批量生成规律性分支结构
用 shell 的大括号展开,可一次性初始化多个并列子目录。例如后端项目常用结构:
mkdir -p project/{src/{main,test},docs,config,scripts}
等价于创建:project/src/main、project/src/test、project/docs、project/config、project/scripts。
注意:大括号内不能有空格,{src, test} 会错误生成带前导空格的目录名。
安全处理含空格或特殊字符的路径
当目录名含空格、中文、括号或 $ 符号(如 user data、config (backup)、日志备份)时,大括号展开不可靠,必须改用逐行读取方式:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 先准备
dirs.txt,每行一个完整路径(含引号或不加引号均可,内容本身要准确) - 执行:
while IFS= read -r dir; do mkdir -p "$dir"; done
IFS= 防止行首尾空格被截断,-r 防止反斜杠被误解析——这两个参数缺一不可。
显式控制权限,避免 umask 干扰
不加 -m 时,权限由当前 shell 的 umask 决定,CI/CD 环境和本地可能不一致。需确定权限就一定要加 -m:
-
mkdir -p -m 755 deploy/{bin,etc,logs}→ 所有新建目录为rwxr-xr-x -
mkdir -p -m 700 .cache/private→ 仅属主可读写执行
权限数字按“所有者/组/其他”三位设定;-m 必须写在 -p 后面,顺序不能颠倒。
加 -v 查看创建过程,便于验证和调试
加上 -v 参数能实时输出每一级实际创建的目录,特别适合检查路径是否按预期展开:
mkdir -pv app/{backend/{src,tests},frontend/public}
输出类似:mkdir: created directory 'app/backend'mkdir: created directory 'app/backend/src'mkdir: created directory 'app/backend/tests'
若某级已存在,则不显示,方便确认哪些是新创建的。










