我正在编写一个在AIX上的KornShell(ksh)下运行的shell脚本。我想使用mkdir命令创建一个目录。但是目录可能已经存在,在这种情况下我不想做任何事情。因此,我想要么测试目录是否不存在,要么抑制mkdir在尝试创建现有目录时抛出的“File exists”错误。
我怎样才能做到最好?
我正在编写一个在AIX上的KornShell(ksh)下运行的shell脚本。我想使用mkdir命令创建一个目录。但是目录可能已经存在,在这种情况下我不想做任何事情。因此,我想要么测试目录是否不存在,要么抑制mkdir在尝试创建现有目录时抛出的“File exists”错误。
我怎样才能做到最好?
当前回答
mkdir在Windows 8+系统上不再支持-p开关。
您可以使用此选项:
IF NOT EXIST dir_name MKDIR dir_name
其他回答
尝试mkdir-p:
mkdir -p foo
注意,这还将创建任何不存在的中间目录;例如,
mkdir -p foo/bar/baz
将创建目录foo、foo/bar和foo/bar/baz(如果它们不存在)。
一些实现(如GNU mkdir)包括mkdir--父代作为更可读的别名,但这在POSIX/Single Unix规范中没有指定,在许多常见平台(如macOS、各种BSD和各种商业Unix)上也不可用,因此应避免使用。
如果您希望在父目录不存在时出现错误,并且希望在不存在的情况下创建目录,则可以先测试目录的存在:
[ -d foo ] || mkdir foo
使用-p标志。
man mkdir
mkdir -p foo
directory_name = "foo"
if [ -d $directory_name ]
then
echo "Directory already exists"
else
mkdir $directory_name
fi
这是一个简单的函数(Bashshell),它允许您在目录不存在时创建目录。
#------------------------------------------#
# Create a directory if it does not exist. #
#------------------------------------------#
# Note the "-p" option in the mkdir #
# command which creates directories #
# recursively. #
#------------------------------------------#
createDirectory() {
mkdir -p -- "$1"
}
您可以将上述函数调用为:
createDirectory“$(mktemp-d目录示例.XXXXXX)/fooDir/BarDir”
如果fooDir和BarDir不存在,上面的命令会创建它们。注意mkdir命令中的“-p”选项,它递归地创建目录。
对“经典”解决方案的改进(Brian Campbell)-处理指向目录的符号链接的情况。
[ -d foo/. ] || mkdir foo