mkdir -p在Mac中

时间:2014-01-09 08:04:15

标签: macos mkdir operand

我一直在阅读OSX Man页面的描述。关于mkdir -p

,它有以下描述
  

-p

     

根据需要创建中间目录。如果未指定此选项,则每个操作数的完整路径前缀必须已存在。另一方面,如果指定了此选项,则如果作为操作数给出的目录已存在,则不会报告错误。使用当前umask修改的rwxrwxrwx(0777)权限位创建中间目录,以及所有者的写入和搜索权限。

我不太注意这个描述。特别是“如果未指定此选项,则每个操作数的完整路径前缀必须已存在。另一方面,如果指定了此选项,则如果作为操作数的目录已存在,则不会报告错误。”

有人对这个解释有一个例子吗?

4 个答案:

答案 0 :(得分:26)

鉴于此目录结构:

/
  foo/
  bar/
    baz/

这显然有效:

mkdir /foo/x

这将工作:

mkdir /foo/x/y

由于/foo/x不存在,因此无法在其下创建目录/foo/x/y前缀 /foo/x/需要存在才能创建/foo/x/y

这是-p的用武之地。这有效:

mkdir -p /foo/x/y

/foo/x将与/foo/x/y隐式创建。

如果您尝试:

mkdir /bar/baz

您将收到目录已存在的错误消息。但是,如果你这样做:

mkdir -p /bar/baz

你不会收到错误,它会默默地忽略所有已经存在的目录,并且对结果不满意而不做任何事情。

答案 1 :(得分:2)

想象一下,你有一个空文件夹,你想要创建一个名为“d1”的子目录和一个名为“d2”的“d1”内的子目录。通常你必须这样做:

mkdir d1
mkdir d1/d2

使用“-p”选项,您可以让mkdir为您创建中间目录(d1):

mkdir -p d1/d2

你要问的那句话说如果“d1”已经存在并且你使用“mkdir -p”那么它已经存在并且没有任何错误信息也无关紧要。

答案 2 :(得分:1)

这项工作于10.10.4版本

mkdir -pv d1/d/d3 

答案 3 :(得分:0)

不确定它是否仅是mac,但是可以在mac os x上做到

mkdir -p src/{main,test}/{java,resources,scala}

这不仅会为您提供目录的嵌套信息,而且还会为您的目录提供笛卡尔积:

src/test/java
src/test/resources
src/test/scala
src/main/java
src/main/resources
src/main/scala