我正在编写一个在AIX上的KornShell(ksh)下运行的shell脚本。我想使用mkdir命令创建一个目录。但是目录可能已经存在,在这种情况下我不想做任何事情。因此,我想要么测试目录是否不存在,要么抑制mkdir在尝试创建现有目录时抛出的“File exists”错误。

我怎样才能做到最好?


当前回答

这是一个简单的函数(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”选项,它递归地创建目录。

其他回答

或者如果您想先检查是否存在:

if [[ ! -e /path/to/newdir ]]; then
            mkdir /path/to/newdir
fi

-e是KornShell的存在测试。

你也可以尝试在谷歌上搜索KornShell手册。

简单、无声、致命:

mkdir -p /my/new/dir >/dev/null 2>&1

使用-p标志。

man mkdir
mkdir -p foo

对“经典”解决方案的改进(Brian Campbell)-处理指向目录的符号链接的情况。

[ -d foo/. ] || mkdir foo

即使目录存在,mkdir foo也能工作。要使其仅在名为“foo”的目录不存在时工作,请尝试使用-p标志。

例子:

mkdir -p foo

这将仅在名为“foo”的目录不存在时创建该目录。:)