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

我怎样才能做到最好?


当前回答

这应该是有效的:

$ mkdir -p dir

or:

if [[ ! -e $dir ]]; then
    mkdir $dir
elif [[ ! -d $dir ]]; then
    echo "$dir already exists but is not a directory" 1>&2
fi

如果目录不存在,它将创建该目录,但如果您尝试创建的目录名称已被其他目录使用,则会发出警告。

其他回答

古老而真实的

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

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

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

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

例子:

mkdir -p foo

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

简单、无声、致命:

mkdir -p /my/new/dir >/dev/null 2>&1
directory_name = "foo"

if [ -d $directory_name ]
then
    echo "Directory already exists"
else
    mkdir $directory_name
fi

这应该是有效的:

$ mkdir -p dir

or:

if [[ ! -e $dir ]]; then
    mkdir $dir
elif [[ ! -d $dir ]]; then
    echo "$dir already exists but is not a directory" 1>&2
fi

如果目录不存在,它将创建该目录,但如果您尝试创建的目录名称已被其他目录使用,则会发出警告。