如何仅在目录不存在时创建目录
如何仅在目录不存在时创建目录
技术背景
在Shell脚本编程中,经常需要创建目录。但在创建之前,需要确保该目录不存在,以避免覆盖或产生错误。同时,可能还需要处理父目录不存在的情况。
实现步骤
使用 mkdir -p
命令
mkdir -p
命令可以创建目录及其所有必要的父目录,如果目录已经存在,不会产生错误。
1 |
|
如果要创建多层目录,例如 foo/bar/baz
,可以使用:
1 |
|
需要注意的是,mkdir --parents
是 mkdir -p
的一个更易读的别名,但不是POSIX标准规定的,在很多常见平台(如macOS、各种BSD和商业Unix系统)上不可用,应避免使用。
先检查目录是否存在
如果希望在父目录不存在时产生错误,并且仅在目录不存在时创建,可以先使用 test
命令检查目录是否存在:
1 |
|
自定义错误处理
如果要创建的目录名已经被其他非目录的东西占用,希望得到警告,可以使用以下代码:
1 |
|
定义复杂目录树
可以使用 mkdir -p
结合花括号语法来一次性定义复杂的目录树:
1 |
|
不显示错误信息
如果不想显示任何错误信息,可以使用:
1 |
|
如果想显示自定义的错误信息,可以使用:
1 |
|
在Windows系统上的处理
在Windows 8+系统上,mkdir
不再支持 -p
开关,可以使用以下命令:
1 |
|
使用函数创建目录
可以编写一个简单的Bash函数来创建目录:
1 |
|
调用示例:
1 |
|
处理符号链接情况
为了处理指向目录的符号链接情况,可以使用以下改进的命令:
1 |
|
核心代码
以下是几种常见情况的核心代码示例:
简单创建目录
1 |
|
先检查再创建
1 |
|
自定义错误处理
1 |
|
最佳实践
- 优先使用
mkdir -p
命令,因为它可以处理多层目录的创建,并且在目录已经存在时不会报错。 - 在脚本中使用
mkdir -p
可以避免手动检查每个父目录是否存在。 - 如果需要自定义错误处理,使用
if
语句结合test
命令来检查目录是否存在。
常见问题
mkdir --parents
不可用:如前所述,mkdir --parents
不是POSIX标准规定的,在很多平台上不可用,应使用mkdir -p
代替。- Windows系统兼容性问题:Windows 8+系统上
mkdir
不支持-p
开关,需要使用IF NOT EXIST
语句。
如何仅在目录不存在时创建目录
https://119291.xyz/posts/2025-05-12.how-to-mkdir-only-if-directory-not-exist/