【问题标题】:mkdir -p in MacMac 中的 mkdir -p
【发布时间】:2014-01-27 16:15:37
【问题描述】:

我一直在阅读 OSX 手册页的说明。关于mkdir -p的描述如下:

-p

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

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

有人有这个解释的例子吗?

【问题讨论】:

  • @trojanfoe 这个问题通常适用于几乎所有具有mkdir 的系统,而不仅仅是 OS X。
  • @deceze 然后更改标签。

标签: macos mkdir operand


【解决方案1】:

不确定是否只有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

【讨论】:

    【解决方案2】:

    这项工作在版本 10.10.4

    mkdir -pv d1/d/d3 
    

    【讨论】:

      【解决方案3】:

      假设您有一个空文件夹,并且您想要创建一个名为“d1”的子目录,并在“d1”中创建一个名为“d2”的子目录。通常你必须这样做:

      mkdir d1
      mkdir d1/d2
      

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

      mkdir -p d1/d2
      

      您所询问的内容是,如果“d1”已经存在并且您使用“mkdir -p”,那么它已经存在并且不会有任何错误消息并不重要。

      【讨论】:

        【解决方案4】:

        鉴于此目录结构:

        /
          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
        

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

        【讨论】:

          猜你喜欢
          • 2014-05-09
          • 1970-01-01
          • 2011-12-23
          • 1970-01-01
          • 2019-02-18
          • 2010-10-10
          • 2018-09-30
          相关资源
          最近更新 更多