只有在目录不存在的情况下如何使用mkdir?
我正在编写一个shell脚本,以便在AIX上的KornShell(ksh)下运行。 我想使用mkdir
命令来创build一个目录。 但目录可能已经存在,在这种情况下,我不想做任何事情。 因此,我想要testing以查看该目录不存在,或者抑制mkdir
在尝试创build现有目录时抛出的“文件存在”错误。
任何想法如何最好地做到这一点?
试试mkdir -p
:
mkdir -p foo
请注意,这也将创build任何不存在的中间目录; 例如,
mkdir -p foo/bar/baz
将创build目录foo
, foo/bar
和foo/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任意数量的目录。