我一直在阅读OSX Man页面的描述。关于mkdir -p
:
-p
根据需要创建中间目录。如果未指定此选项,则每个操作数的完整路径前缀必须已存在。另一方面,如果指定了此选项,则如果作为操作数给出的目录已存在,则不会报告错误。使用当前umask修改的rwxrwxrwx(0777)权限位创建中间目录,以及所有者的写入和搜索权限。
我不太注意这个描述。特别是“如果未指定此选项,则每个操作数的完整路径前缀必须已存在。另一方面,如果指定了此选项,则如果作为操作数的目录已存在,则不会报告错误。”
有人对这个解释有一个例子吗?
答案 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