我正在编写一个在AIX上的KornShell(ksh)下运行的shell脚本。我想使用mkdir命令创建一个目录。但是目录可能已经存在,在这种情况下我不想做任何事情。因此,我想要么测试目录是否不存在,要么抑制mkdir在尝试创建现有目录时抛出的“File exists”错误。
我怎样才能做到最好?
我正在编写一个在AIX上的KornShell(ksh)下运行的shell脚本。我想使用mkdir命令创建一个目录。但是目录可能已经存在,在这种情况下我不想做任何事情。因此,我想要么测试目录是否不存在,要么抑制mkdir在尝试创建现有目录时抛出的“File exists”错误。
我怎样才能做到最好?
当前回答
if [ !-d $dirName ];then
if ! mkdir $dirName; then # Shorter version. Shell will complain if you put braces here though
echo "Can't make dir: $dirName"
fi
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
如果目录不存在,它将创建该目录,但如果您尝试创建的目录名称已被其他目录使用,则会发出警告。
directory_name = "foo"
if [ -d $directory_name ]
then
echo "Directory already exists"
else
mkdir $directory_name
fi
对“经典”解决方案的改进(Brian Campbell)-处理指向目录的符号链接的情况。
[ -d foo/. ] || mkdir foo
这是一个简单的函数(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脚本中使用此命令。