仅在目录不存在时如何使用mkdir

问题描述 投票:1990回答:15

我正在编写一个Shell脚本以在AIX上的KornShell(ksh)下运行。我想使用mkdir命令创建目录。但是该目录可能已经存在,在这种情况下,我不想执行任何操作。因此,我想测试该目录不存在,还是抑制mkdir尝试创建现有目录时抛出的“文件存在”错误。

我如何最好地做到这一点?

shell scripting ksh aix mkdir
15个回答
3303
投票

尝试mkdir -p

mkdir -p

注意,这还会创建任何不存在的中间目录;例如,

mkdir -p foo

将创建目录mkdir -p foo/bar/baz foofoo/bar,如果它们不存在。

[某些实现,例如GNU foo/bar/baz包含mkdir]作为更易读的别名,但这在POSIX / Single Unix Specification中未指定,并且在macOS,各种BSD和各种商业Unix等许多常见平台上不可用,因此应该避免。

[如果在父目录不存在时想要一个错误,而在目录不存在时想要创建该目录,那么可以先mkdir --parents作为目录的存在:

test

177
投票

这应该起作用:

test

或:

[ -d foo ] || mkdir foo

如果目录不存在,它将创建目录,但是如果您要创建的目录名称已经被目录以外的其他名称使用,则会发出警告。


89
投票

使用-p标志。

$ mkdir -p dir

75
投票

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

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

41
投票

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

man mkdir
mkdir -p foo

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

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

20
投票

古老而真实的尝试

[ -d newdir ] || mkdir newdir

在许多其他解决方案都没有竞争条件的情况下,将完成您想要的工作。

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


15
投票

[ -d newdir ] && echo "Directory Exists" || mkdir newdir 即使目录存在也有效。要使其仅在名为“ foo”的目录不存在时起作用,请尝试使用mkdir /tmp/qq >/dev/null 2>&1 标志。

示例:

mkdir foo

仅当目录不存在时,才会创建名为“ foo”的目录。 :)


11
投票
-p

10
投票

mkdir在Windows 8+系统上不再支持-p开关。

您可以使用此:

mkdir -p foo

10
投票

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

directory_name = "foo"

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

-eIF NOT EXIST dir_name MKDIR dir_name 的存在测试。

您也可以尝试使用Google搜索KornShell手册。


9
投票

关于选项-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下看到anotherdirmkdir -p /tmp/newdir/anotherdir。您可以根据需要多次发出此命令,该命令始终为newdir。由于这个原因,大多数人在使用这些实际路径之前先在外壳程序脚本中使用此命令。


8
投票

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

  1. dir = / home / dir_name

    exit(0)
  2. 您可以使用带有-p选项的mkdir目录来创建目录。它将检查目录是否不可用。

    if

    mkdir -p也允许创建目录的树结构。如果要使用相同的命令创建父目录和子目录,可以选择mkdir -p

    if [ ! -d $dir ]
    then
         mkdir $dir
    else
         echo "Directory exists"
    fi
    

3
投票

这是一个简单的函数(Bash shell),如果不存在目录,则可以使您创建目录。

mkdir -p $dir

您可以通过以下方式调用上述函数:

createDirectory / tmp / fooDir / BarDir

上面创建的fooDir和BarDir不存在。请注意mkdir命令中的“ -p”选项,该选项以递归方式创建目录。


2
投票
mkdir -p /home/parent_dir /home/parent_dir/child1 /home/parent_dir/child2
  • mkdir =创建目录
  • -p =-父母
  • ((如果存在,则没有错误,根据需要创建父目录)

2
投票
#----------------------------------
# Create a directory if it doesn't exist
#------------------------------------
createDirectory() {
    if [ ! -d $1 ]
        then
        mkdir -p $1
    fi
}
© www.soinside.com 2019 - 2024. All rights reserved.