作成中のフォルダーが既に存在する場合、mkdir -pは完全に安全です


13

フォルダーがあるとしましょう:

./folder/

その中には、多くのファイルとサブディレクトリさえあります。

私が実行するとき:

mkdir -p folder

警告もエラーは表示されません。確認したいのですが、このコマンドの結果、何かが失われたり、変更されたりしていますか?


2
mkdirのヘルプによると、ディレクトリは存在しない場合にのみ作成されます。これは、ディレクトリが存在するときに何も実行されないことを意味します。
マルコ

回答:


22

mkdir -p ディレクトリが既に存在し、ディレクトリの内容が変更されない場合、エラーは発生しません。

の手動入力 mkdir


1
この答えは正しくないようです。-pフラグを使用しない限り、ディレクトリが存在する場合、mkdirは実際にエラーを出力します。
アーロンチカリ16

エラーでif(err.code == 'EEXIST')、ディレクトリが既に存在する場合、この条件がtrueになるようなコードをチェックできます。
user403173

12

ポータブルスクリプトがで言うPOSIX、に依存しますmkdir-pオプション:

既存のディレクトリを指定する各dirオペランドは、エラーなしで無視されます。

そして、エラーが報告されていない場合、-pオプションはその仕事をしました:

欠落している中間パス名コンポーネントを作成します。


4

ディレクトリが既に存在する場合、mkdirはエラーを表示します。

ディレクトリが既に存在する場合、mkdir -pはエラーを表示しません。また、ディレクトリは変更されないままになります。つまり、内容はそのまま保持されます。


0

あなたはそれを言う、

実行するmkdir -p folderと、警告もエラーは表示されません。

コマンドが失敗するとエラーが表示されます。この-pフラグは、ディレクトリが既に存在する場合にのみエラーを抑制します。

touch x
mkdir -p x
mkdir: cannot create directory ‘x’: File exists

たとえば、で通常のユーザーとしてディレクトリを作成しようとすると、同じ問題が発生します/etc

-p抑制しますと、ターゲットディレクトリがすでに存在する場合にトリガーされるエラーです

mkdir y
mkdir -p y

ただし、すべての場合において、何も失うことはなく、何も変更されません。エラーが発生した場合、期待したディレクトリが得られません。


これは、答えというよりもコメントのようです。
G-Manは

私はそのことについて疑問に思ったが、私は具体的には、OPの質問に声明を反駁よ「私は実行するとmkdir -p folder、私はすべてのエラーにも、警告は表示されません。
roaimaを
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.