mkdir -p在Mac中

use*_*083 15 macos mkdir operand

我一直在阅读OSX Man页面的描述.它有以下描述mkdir -p:

-p

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

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

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

dec*_*eze 31

鉴于此目录结构:

/
  foo/
  bar/
    baz/
Run Code Online (Sandbox Code Playgroud)

这显然有效:

mkdir /foo/x
Run Code Online (Sandbox Code Playgroud)

这将工作:

mkdir /foo/x/y
Run Code Online (Sandbox Code Playgroud)

因为/foo/x不存在,/foo/x/y所以无法在其下创建目录.该前缀 /foo/x/的需要,以创建存在/foo/x/y.

这是-p进来的地方.这有效:

mkdir -p /foo/x/y
Run Code Online (Sandbox Code Playgroud)

/foo/x将隐含地与...一起创建/foo/x/y.

如果你试试:

mkdir /bar/baz
Run Code Online (Sandbox Code Playgroud)

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

mkdir -p /bar/baz
Run Code Online (Sandbox Code Playgroud)

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