如果目录尚不存在,如何mkdir?

时间:2009-04-27 14:47:45

标签: shell scripting ksh aix mkdir

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

关于如何最好地做到这一点的任何想法?

16 个答案:

答案 0 :(得分:2738)

尝试mkdir -p

mkdir -p foo

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

mkdir -p foo/bar/baz
如果目标不存在,

将创建目录foofoo/barfoo/bar/baz

像GNU mkdir这样的实现包含mkdir --parents作为更易读的别名,但这在POSIX / Single Unix规范中没有规定,并且在诸如macOS,各种BSD和各种常见平台上不可用。商业Unix,所以应该避免。

如果您希望父目录不存在时出错,并且想要创建目录(如果该目录不存在),那么您可以test首先存在该目录:

[ -d foo ] || mkdir foo

答案 1 :(得分:144)

这应该有效:

$ 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
如果目录不存在,

将创建该目录,但是警告您,您尝试创建的目录的名称是否已被目录以外的其他目录使用。

答案 2 :(得分:80)

使用-p标志。

man mkdir
mkdir -p foo

答案 3 :(得分:66)

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

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

答案 4 :(得分:29)

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

[ -d newdir ] || mkdir newdir

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

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

答案 5 :(得分:18)

旧的尝试和真实的

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

将完成您想要的任何其他解决方案所没有的竞争条件。

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

答案 6 :(得分:13)

即使目录存在,

mkdir foo仍然有效。 要使其仅在名为“foo”的目录不存在时起作用,请尝试使用-p标志。

示例: -

mkdir -p foo

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

答案 7 :(得分:10)

directory_name = "foo"

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

答案 8 :(得分:7)

或者如果你想首先检查存在:

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

-e 是korn shell的现有测试。

你也可以尝试谷歌搜索korn shell手册。

答案 9 :(得分:7)

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

您可以使用:

IF NOT EXIST dir_name MKDIR dir_name

答案 10 :(得分:3)

您可以使用if循环来检查目录是否存在,如果没有退出则创建目录。

1)dir = / home / dir_name

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

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

mkdir -p $dir

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

mkdir -p /home/parent_dir /home/parent_dir/child1 /home/parent_dir/child2

答案 11 :(得分:2)

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

答案 12 :(得分:1)

这是一个简单的函数(bash shell),它允许您创建一个目录(如果它不存在)。

#----------------------------------
# Create a directory if it doesn't exist
#------------------------------------
createDirectory() {
    if [ ! -d $1 ]
        then
        mkdir -p $1
    fi
}

您可以将上述功能称为:

  

createDirectory / tmp / fooDir / BarDir

如果它们不存在,上面会创建fooDir和BarDir。注意" -p" mkdir命令中的选项,它以递归方式创建目录。希望这会有所帮助。

答案 13 :(得分:1)

mkdir -p sam
  • mkdir =制作目录
  • -p = - parent?
  • (如果存在则无错误,根据需要创建父目录)

答案 14 :(得分:1)

有关选项-man mkdir的参考手册页p

   -p, --parents
          no error if existing, make parent directories as needed

将在给定路径中创建所有目录,如果存在则不会引发错误,否则它将在给定路径中从左到右创建所有目录。请尝试以下命令。发出此命令之前,目录newdiranotherdir不存在

正确用法

mkdir -p /tmp/newdir/anotherdir

执行命令后,您可以看到在/ tmp下创建的newdiranotherdir。您可以根据需要多次发出此命令,该命令始终带有exit(0)。由于这个原因,大多数人在使用这些实际路径之前先在shell脚本中使用此命令。

答案 15 :(得分:0)

简单,沉默和致命:

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