OSX Manページの説明を読んでいます。 mkdir -p
:
-p
必要に応じて中間ディレクトリを作成します。このオプションが指定されていない場合、各オペランドの絶対パス接頭辞がすでに存在している必要があります。一方、このオプションを指定した場合、オペランドとして指定されたディレクトリがすでに存在してもエラーは報告されません。中間ディレクトリは、現在のumaskによって変更されたrwxrwxrwx(0777)の許可ビットに加えて、所有者の書き込みおよび検索許可で作成されます。
私はこの説明に完全に従っていません。特に「このオプションが指定されていない場合、各オペランドのフルパスプレフィックスがすでに存在している必要があります。一方、このオプションが指定されている場合、オペランドとして指定されたディレクトリがすでに存在してもエラーは報告されません。」
誰かがこの説明に関する例を持っていますか?
このディレクトリ構造を考えると:
/
foo/
bar/
baz/
これは明らかに機能します:
mkdir /foo/x
これはnot機能します:
mkdir /foo/x/y
/foo/x
が存在しないため、その下にディレクトリ/foo/x/y
を作成できません。 prefix/foo/x/
は、/foo/x/y
を作成するために存在する必要があります。
これが-p
の出番です。これは機能します。
mkdir -p /foo/x/y
/foo/x
は/foo/x/y
とともに暗黙的に作成されます。
あなたがしようとすると:
mkdir /bar/baz
ディレクトリがすでに存在するというエラーが表示されます。ただし、次の場合:
mkdir -p /bar/baz
エラーが発生することはありません。既存のすべてのディレクトリを黙って無視し、何もせずに結果で満足するだけです。
空のフォルダがあり、「d1」というサブディレクトリと「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