我正在编写一个shell脚本,以便在AIX上的KornShell(ksh)下运行。我想使用mkdir
命令来创建目录。但目录可能已经存在,在这种情况下我不想做任何事情。因此,我想要测试以查看该目录不存在,或者抑制mkdir
在尝试创建现有目录时抛出的“文件存在”错误。
关于如何最好地做到这一点的任何想法?
答案 0 :(得分:2738)
尝试mkdir -p
:
mkdir -p foo
请注意,这也会创建不存在的任何中间目录;例如,
mkdir -p foo/bar/baz
如果目标不存在,将创建目录foo
,foo/bar
和foo/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
答案 14 :(得分:1)
有关选项-man mkdir
的参考手册页p
-p, --parents
no error if existing, make parent directories as needed
将在给定路径中创建所有目录,如果存在则不会引发错误,否则它将在给定路径中从左到右创建所有目录。请尝试以下命令。发出此命令之前,目录newdir
和anotherdir
不存在
正确用法
mkdir -p /tmp/newdir/anotherdir
执行命令后,您可以看到在/ tmp下创建的newdir
和anotherdir
。您可以根据需要多次发出此命令,该命令始终带有exit(0)
。由于这个原因,大多数人在使用这些实际路径之前先在shell脚本中使用此命令。
答案 15 :(得分:0)
简单,沉默和致命:
mkdir -p /my/new/dir >/dev/null 2>$1