我正在编写一个在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”选项,它递归地创建目录。

其他回答

请参阅选项-p的手册页man mkdir

   -p, --parents
          no error if existing, make parent directories as needed

它将在给定路径中创建所有目录,如果存在,则不会抛出错误,否则它将在指定路径中从左到右创建所有目录。请尝试以下命令。发出此命令之前,newdir和anotherdir目录不存在

正确的用法

mkdir-p/tmp/newdir/其他目录

执行命令后,您可以看到在/tmp下创建的newdir和另一个dir。您可以根据需要多次发出此命令,该命令始终具有出口(0)。由于这个原因,大多数人在使用这些实际路径之前都会在shell脚本中使用此命令。

您可以使用if语句检查目录是否存在。如果没有退出,则创建目录。

dir=/home/dir_name如果[!-d$dir]然后mkdir$目录其他的echo“目录存在”传真您可以使用mkdir和-p选项创建目录。它将检查目录是否不可用。mkdir-p$dirmkdir-p还允许创建目录的树结构。如果要使用相同的命令创建父目录和子目录,可以选择mkdir-pmkdir-p/home/parent_dir/home/paparent_dir/child1/home/parent_dir/child2

如果不想显示任何错误消息:

[ -d newdir ] || mkdir newdir

如果要显示自己的错误消息:

[ -d newdir ] && echo "Directory Exists" || mkdir newdir

使用-p标志。

man mkdir
mkdir -p foo

用一个命令定义复杂的目录树

mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}