mkdir

ディレクトリを生成する

構文

解説

mkdir は、FILENAME で指定された名前のディレクトリを MODE で指定されたパーミッション (umask の制約を受けます) で生成します。 成功すれば真を返し、失敗すれば偽を返しエラーメッセージを $! にセットします。 MODE が省略されるとデフォルト値として 0777 が適用されます。 FILENAME が省略されたらデフォルト値として $_ の値が適用されます。

次のコードは sample という名前のディレクトリをカレントディレクトリに生成します。

mkdir './sample' or die "Failed to create a directory: $!\n";

一般的に、必要最小限の厳格なパーミッションを MODE に指定して、 スクリプト利用者にパーミッションを緩くする手段を与えずにディレクトリを生成するよりかは、 緩めのパーミッションを MODE に指定しておき、スクリプト利用者が umask で実際のディレクトリ生成時のパーミッションを制限できるようにするのが良いでしょう。 つまり、一般的には MODE を指定せずにデフォルト値の 0777 が適用されるようにすれば良いということです。 ただし、機密性が高いディレクトリにしたいときはその限りではありません。 そのような場合は、必要最小限の厳格なパーミッションを MODE に指定するべきです。

FILENAME の最後にスラッシュが存在すると、Perl はそれを無視します。複数のスラッシュが連続していたとしても、それらすべてが無視されます。

mkdir './sample///';    # 最後の /// は無視される

mkdir は再帰的にディレクトリを生成しません。 たとえば次のコードのようにカレントディレクトリに ./foo/bar/baz を生成したいとします。 つまり、カレントディレクトリにディレクトリ foo を生成し、 その配下に ディレクトリ bar を生成し、 さらにその配下に ディレクトリ baz を生成したいとします。

mkdir './foo/bar/baz'
  or die "Failed to create directory: $!\n";  # foo も bar も baz も生成されず die が呼ばれる

上記コードでは foobarbaz も生成されず、 die が呼ばれます。 もし再帰的にディレクトリを一度に生成したいなら、 File::Path モジュールの make_path 関数を使うと良いでしょう。

use File::Path qw(make_path);
make_path('./foo/bar/baz');