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

我怎样才能做到最好?


当前回答

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

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

-e是KornShell的存在测试。

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

其他回答

简单、无声、致命:

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

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

[ -d newdir ] || mkdir newdir

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

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

古老而真实的

mkdir /tmp/qq >/dev/null 2>&1

将在没有任何其他解决方案所具有的竞争条件的情况下完成您想要的操作。

有时最简单(最丑陋)的解决方案是最好的。

请参阅选项-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脚本中使用此命令。

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

[ -d foo/. ] || mkdir foo