我正在编写一个Shell脚本以在AIX上的KornShell(ksh)下运行。我想使用mkdir
命令创建目录。但是该目录可能已经存在,在这种情况下,我不想执行任何操作。因此,我想测试该目录不存在,还是抑制mkdir
尝试创建现有目录时抛出的“文件存在”错误。
我如何最好地做到这一点?
这应该起作用:
test
或:
[ -d foo ] || mkdir foo
如果目录不存在,它将创建目录,但是如果您要创建的目录名称已经被目录以外的其他名称使用,则会发出警告。
使用-p标志。
$ mkdir -p dir
用一个命令定义复杂的目录树
if [[ ! -e $dir ]]; then
mkdir $dir
elif [[ ! -d $dir ]]; then
echo "$dir already exists but is not a directory" 1>&2
fi
如果您不想显示任何错误消息:
man mkdir
mkdir -p foo
如果要显示自己的错误消息:
mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}
古老而真实的尝试
[ -d newdir ] || mkdir newdir
在许多其他解决方案都没有竞争条件的情况下,将完成您想要的工作。
有时最简单(最丑陋)的解决方案是最好的。
[ -d newdir ] && echo "Directory Exists" || mkdir newdir
即使目录存在也有效。要使其仅在名为“ foo”的目录不存在时起作用,请尝试使用mkdir /tmp/qq >/dev/null 2>&1
标志。
示例:
mkdir foo
仅当目录不存在时,才会创建名为“ foo”的目录。 :)
-p
mkdir在Windows 8+系统上不再支持-p开关。
您可以使用此:
mkdir -p foo
或者如果您想先检查是否存在:
directory_name = "foo"
if [ -d $directory_name ]
then
echo "Directory already exists"
else
mkdir $directory_name
fi
-e是IF NOT EXIST dir_name MKDIR dir_name
的存在测试。
您也可以尝试使用Google搜索KornShell手册。
关于选项-if [[ ! -e /path/to/newdir ]]; then
mkdir /path/to/newdir
fi
,请参考手册页KornShell
man mkdir
将在给定路径中创建所有目录,如果存在则不会引发错误,否则它将在给定路径中从左到右创建所有目录。请尝试以下命令。在发出此命令之前,目录p
和 -p, --parents
no error if existing, make parent directories as needed
不存在
正确用法
newdir
执行命令后,您可以在/ tmp下看到anotherdir
和mkdir -p /tmp/newdir/anotherdir
。您可以根据需要多次发出此命令,该命令始终为newdir
。由于这个原因,大多数人在使用这些实际路径之前先在外壳程序脚本中使用此命令。
您可以使用anotherdir
语句检查目录是否存在。如果没有退出,则创建目录。
dir = / home / dir_name
exit(0)
您可以使用带有-p选项的mkdir目录来创建目录。它将检查目录是否不可用。
if
mkdir -p也允许创建目录的树结构。如果要使用相同的命令创建父目录和子目录,可以选择mkdir -p
if [ ! -d $dir ]
then
mkdir $dir
else
echo "Directory exists"
fi
这是一个简单的函数(Bash shell),如果不存在目录,则可以使您创建目录。
mkdir -p $dir
您可以通过以下方式调用上述函数:
createDirectory / tmp / fooDir / BarDir
上面创建的fooDir和BarDir不存在。请注意mkdir命令中的“ -p”选项,该选项以递归方式创建目录。
mkdir -p /home/parent_dir /home/parent_dir/child1 /home/parent_dir/child2
#----------------------------------
# Create a directory if it doesn't exist
#------------------------------------
createDirectory() {
if [ ! -d $1 ]
then
mkdir -p $1
fi
}