一尘不染

仅当目录尚不存在时如何 mkdir?

javascript

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

我怎样才能最好地做到这一点?


阅读 132

收藏
2022-02-07

共1个答案

一尘不染

尝试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
2022-02-07