Shell编程中mkdir命令使用详解
mkdir(Make Directory)是Shell中用于创建目录的基础命令。本文将深入讲解其使用方法、常用选项和实际应用场景。
一、基本语法
mkdir [选项] 目录名...
二、核心功能与选项
1. 基础用法 - 创建单个目录
# 创建名为"project"的目录mkdir project# 验证创建结果ls -ld project
2. 创建多个目录
# 一次性创建多个同级目录mkdir dir1 dir2 dir3# 使用大括号展开批量创建mkdir {backup,log,temp}
3. -p 选项 - 递归创建父目录
这是mkdir最常用的选项,可以创建多级嵌套目录:
# 创建多级目录结构(如果父目录不存在会自动创建)mkdir -p project/src/main/java# 同时创建多个嵌套目录mkdir -p dir1/sub1 dir1/sub2 dir2/sub1# 结合变量使用BASE_DIR="/opt/myapp"mkdir -p "$BASE_DIR/{bin,conf,logs,data}"
4. -m 选项 - 设置权限模式
创建目录时直接指定权限:
# 创建权限为755的目录mkdir -m 755 public_dir# 创建权限为700的私有目录mkdir -m 700 private_dir# 使用八进制或符号模式mkdir -m u=rwx,g=rx,o=rx shared_dir
5. -v 选项 - 显示详细信息
# 显示创建的每个目录mkdir -v newdir# 输出: mkdir: created directory 'newdir'# 结合-p选项显示所有创建的目录mkdir -pv a/b/c# 输出:# mkdir: created directory 'a'# mkdir: created directory 'a/b'# mkdir: created directory 'a/b/c'
三、高级用法与技巧
1. 创建带空格的目录名
# 使用引号mkdir"My Documents"# 使用转义字符mkdir My\ Documents
2. 创建当前日期目录
# 创建如 20260107 格式的目录mkdir"$(date +%Y%m%d)"# 创建带时间戳的目录mkdir"backup_$(date +%Y%m%d_%H%M%S)"
3. 批量创建编号目录
# 创建 dir1 到 dir10 共10个目录mkdirdir{1..10}# 创建带前导零的目录mkdirdir{01..10}
4. 在脚本中使用mkdir
#!/bin/bash# 创建项目目录结构的脚本PROJECT_NAME="myproject"mkdir -pv "$PROJECT_NAME"/{src,tests,docs,build}mkdir -pv "$PROJECT_NAME"/src/{main,utils}mkdir -pv "$PROJECT_NAME"/tests/{unit,integration}echo"项目目录结构创建完成!"tree "$PROJECT_NAME" 2>/dev/null || ls -R "$PROJECT_NAME"
5. 条件创建目录
# 仅当目录不存在时创建[ ! -d "temp_dir" ] && mkdir temp_dir# 或者使用-p选项(不会报错)mkdir -p temp_dir
四、常见错误与注意事项
1. 权限不足错误
# 错误示例mkdir /root/newdir # 普通用户无法创建# 解决方案:使用sudo或切换目录sudomkdir /root/newdir
2. 目录已存在
# 不使用-p时会报错mkdir existing_dir # mkdir: cannot create directory 'existing_dir': File exists# 解决方案:使用-p选项mkdir -p existing_dir # 不会报错
3. 路径不是目录
# 如果同名文件已存在touch myfilemkdir myfile # mkdir: cannot create directory 'myfile': File exists
五、实用场景示例
1. 快速搭建项目结构
mkdir -pv myapp/{cmd/{server,client},pkg/{auth,api},internal/config,web/static}
2. 按日期归档日志
LOG_DATE=$(date +%Y/%m/%d)mkdir -pv "/var/logs/app/$LOG_DATE"
3. 创建临时工作目录
TEMP_DIR=$(mktemp -d) # 创建临时目录# 或者TEMP_DIR="/tmp/work_$$"mkdir -p "$TEMP_DIR"
六、总结
| | |
-p | | mkdir -p a/b/c |
-m | | mkdir -m 755 dir |
-v | | mkdir -v newdir |
mkdir命令虽然简单,但配合适当的选项在脚本编程和日常使用中非常强大。掌握-p选项的递归创建功能,可以大大提高工作效率。
最佳实践建议: