mkdir语言 - p in Mac



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

-p

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

我不太遵循这个描述。 特别是"如果未指定此选项,则每个操作数的完整路径前缀必须已存在。另一方面,指定此选项后,如果作为操作数给出的目录已存在,则不会报告任何错误。

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

给定此目录结构:

/
  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

您不会收到错误,它只会静默地忽略所有已经存在的目录,并且对结果感到满意,而无需执行任何操作。

假设您有一个空文件夹,并且想要在"d1"中创建一个名为"d2"的子目录。通常,您必须执行以下操作:

mkdir d1
mkdir d1/d2

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

mkdir -p d1/d2

您询问的位说,如果"d1"已经存在并且您使用"mkdir -p",那么它已经存在并且不会有任何错误消息就没关系了。

这在版本 10.10.4 上工作

mkdir -pv d1/d/d3 

不确定它是否仅适用于 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

最新更新