mkdir -p可递归创建完整目录树,touch用于创建空文件或更新时间戳;二者配合能高效搭建项目骨架,且需注意路径安全、权限显式设定及避免空格等shell元字符。

直接用 mkdir -p 创建层级目录,用 touch 创建空文件,两者配合就能快速搭起项目骨架。关键不是“能不能建”,而是“怎么建得稳、不踩坑、可复用”。
用 -p 一次性建好整条路径
不加 -p,mkdir 遇到上级目录不存在就会报错。比如当前是空目录,执行 mkdir a/b/c 会失败。加了 -p 就能从左到右逐级创建,已存在的层级自动跳过,不报错也不中断。
-
mkdir -p project/src/main/java/com/example/app—— 一条命令建完 6 层目录 -
mkdir -p logs/{error,info,warn}—— 同时建三个同级子目录 -
mkdir -p data/{2024,2025}/{01..12}—— 生成两年共 24 个月份子目录
批量建目录要防空格和特殊字符
大括号展开(如 {a,b,c})只在名字干净时安全。一旦含空格、中文、括号或 $* 等 shell 元字符,就会解析出错或截断。
- 安全做法:把目录名按行存进
dirs.txt,再用while IFS= read -r dir; do mkdir -p "$dir"; done - 关键点:
IFS=防首尾空格被删,-r防反斜杠转义,"$dir"保证变量整体传入
创建文件用 touch,但注意它不只建空文件
touch 的核心作用是更新时间戳;只有当文件不存在时,它才顺带新建一个空文件。所以它适合初始化配置文件、占位文件、触发构建流程等场景。
-
touch config.yaml main.py .gitignore—— 一次建多个空文件 -
touch -t 20240101000000 build.log—— 新建文件并设为指定时间戳(调试或归档常用) - 注意:
touch不支持递归建目录,想建logs/error.log必须先确保logs/存在,或搭配mkdir -p logs && touch logs/error.log
权限别依赖系统默认,显式设定更可靠
新建目录的权限受当前 umask 影响,不同环境可能不一致(本地常为 0002,CI 环境可能是 0022),导致组写权限意外丢失。
- 统一用
-m指定权限:mkdir -p -m 755 bin lib - 敏感目录如
private或secrets,直接设严一点:mkdir -m 700 private - 搭配
-v可看每步是否成功:mkdir -pv logs/{error,info}











