只有在目录不存在的情况下如何使用mkdir?

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

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

试试mkdir -p

 mkdir -p foo 

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

 mkdir -p foo/bar/baz 

将创build目录foofoo/barfoo/bar/baz如果它们不存在)。

如果在父目录不存在时想要出现错误,并且想要创build该目录(如果该目录不存在),则可以先test该目录的存在:

 [ -d foo ] || mkdir foo 

这应该工作:

 $ 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 

如果该目录不存在,将创build该目录,但是如果正在尝试创build的目录的名称已被某个目录以外的其他目录使用,则会发出警告。

使用-p标志。

 man mkdir mkdir -p foo 

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

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

旧的尝试和真实的

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

将做任何你想要的,而没有任何其他解决scheme的竞争条件。

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

如果你不想显示任何错误信息:

 [ -d newdir ] || mkdir newdir 

如果你想显示你自己的错误信息:

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

即使目录存在, mkdir foo正常工作。 要使其工作,只有在名为“foo”的目录不存在时,请尝试使用-p标志。

例如: –

 mkdir -p foo 

只有当它不存在时,才会创build名为“foo”的目录。 🙂

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

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

-e是korn shell的存在testing。

您也可以尝试使用search引擎shell手册。

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

mkdir在Windows 8+系统上不支持-p切换。

你可以使用这个:

 IF NOT EXIST dir_name MKDIR dir_name 

你应该使用-m选项和mkdir命令。

 mkdir -p parent-dir/child-dir/another-dir/another-sub-dir 

这将创build所有目录,如果父目录不存在,则会自动创build它(如果存在),则会在该目录下创build剩余的目录。 如地址所示,我们可以通过单个命令创build任意数量的目录。