LinuxやmacOSなどのUnix系オペレーティングシステムにおいて、ターミナルから操作を行う際に最も頻繁に使用するコマンドの一つがmkdirコマンドです。
「make directory」の略称であるこのコマンドは、その名の通り新しいディレクトリ(フォルダ)を作成するために使用されます。
一見すると単純なコマンドに思えるかもしれませんが、Bashにおけるmkdirを使いこなすことは、システムの構築や開発ワークフローの自動化において非常に重要なスキルとなります。
オプションを活用することで、深い階層のディレクトリを一度に作成したり、作成と同時に適切なアクセス権限を付与したりすることが可能になります。
本記事では、mkdirコマンドの基本的な使い方から、実務で役立つ便利なオプション、さらにはBashの機能を組み合わせた効率化のテクニックまでを詳しく解説します。
mkdirコマンドの基本操作
mkdirコマンドの最も基本的な使い方は、コマンドの後に作成したいディレクトリの名前を指定することです。
これにより、現在の作業ディレクトリ(カレントディレクトリ)内に新しいディレクトリが作成されます。
# basic_dir という名前のディレクトリを作成する
mkdir basic_dir
実行後、エラーメッセージが表示されなければディレクトリの作成は成功しています。
ls -lコマンドを実行することで、作成されたディレクトリを確認できます。
複数のディレクトリを同時に作成する
mkdirコマンドは、引数として複数のディレクトリ名を指定することができます。
スペースで区切って記述することで、一度の実行で複数のディレクトリを並列に作成可能です。
# project, data, logs の3つのディレクトリを一度に作成する
mkdir project data logs
このように、一度のコマンド実行で複数のディレクトリを用意できる点は、GUI(マウス操作)で一つずつフォルダを作成するよりも圧倒的に効率的です。
パスを指定して作成する
カレントディレクトリ以外にディレクトリを作成したい場合は、相対パスまたは絶対パスを指定します。
# /tmp ディレクトリの下に test_dir を作成する
mkdir /tmp/test_dir
# 既存の documents ディレクトリの下に reports を作成する
mkdir documents/reports
ただし、指定したパスの親ディレクトリが存在しない場合、「No such file or directory」というエラーが発生して作成に失敗します。この問題を解決するのが、後述する-pオプションです。
主要なオプションとその活用方法
mkdirには、作業をよりスムーズにするためのオプションがいくつか用意されています。
これらを理解しておくことで、シェルスクリプトの記述や日常的なコマンド操作がより洗練されたものになります。
中間ディレクトリも一括作成する(-pオプション)
実務で最も多用されるのが-p(parents)オプションです。
このオプションを使用すると、指定したパスに含まれる存在しない親ディレクトリもすべて自動的に作成してくれます。
例えば、work/2026/05/reportという深い階層を作成したい場合、通常ならworkから順に作成していく必要がありますが、-pを使えば一撃で完了します。
# 存在しない中間ディレクトリを含めて一括作成
mkdir -p work/2026/05/report
また、-pオプションにはもう一つの重要な性質があります。
それは、「指定したディレクトリが既に存在していてもエラーにならない」という点です。
通常のmkdirでは既に存在する名前を指定するとエラーになりますが、シェルスクリプトなどで「もしなければ作る」という処理を記述する際には、このオプションを付けておくのが定石です。
作成時のパーミッションを指定する(-mオプション)
ディレクトリを作成した直後に、chmodコマンドで権限を変更しているケースをよく見かけますが、-m(mode)オプションを使えば、作成と同時にアクセス権限(パーミッション)を設定できます。
# 所有者にのみ全ての権限(700)を与えてディレクトリを作成
mkdir -m 700 private_data
| オプション | 記述例 | 説明 |
|---|---|---|
| -m | mkdir -m 755 dir_name | ディレクトリ作成時にパーミッションを755に設定する。 |
| -p | mkdir -p a/b/c | 指定したパスの親ディレクトリも必要に応じて作成する。 |
| -v | mkdir -v new_dir | ディレクトリ作成に成功した際にメッセージを表示する。 |
実行結果を表示する(-vオプション)
-v(verbose)オプションは、ディレクトリが作成されるたびに詳細なメッセージを出力します。
大量のディレクトリを作成する際や、スクリプトのデバッグ時に「正しく作成されたか」を視認するために役立ちます。
# 詳細メッセージを表示しながら作成
mkdir -pv project/{src,bin,docs}
mkdir: created directory 'project'
mkdir: created directory 'project/src'
mkdir: created directory 'project/bin'
mkdir: created directory 'project/docs'
Bashの機能を活かした効率的なディレクトリ作成
mkdirコマンド自体のオプションだけでなく、Bashが持つ強力なシェル機能(ブレース展開など)を組み合わせることで、ディレクトリ作成の効率はさらに向上します。
ブレース展開による動的な一括作成
Bashの「ブレース展開(Brace Expansion)」を利用すると、複雑なディレクトリ構造を一瞬で定義できます。
{}の中にカンマ区切りで名前を入れることで、それらを展開してmkdirに渡してくれます。
# 開発プロジェクトの標準構成を作成する
mkdir -p my_app/{src,test,config,scripts,docs}
さらに、数値を指定した範囲展開も可能です。
# log_01 から log_10 までのディレクトリを作成する
mkdir log_{01..10}
このテクニックを-pオプションと組み合わせれば、「数年分の月別フォルダを1行のコマンドで作成する」といった作業も数秒で終わります。
# 2024年から2026年までの、各年1月から12月のディレクトリを作成
mkdir -p backup/{2024..2026}/{01..12}
変数を利用したディレクトリ作成
シェルスクリプト内では、日付やプロジェクト名を変数に格納してディレクトリ名に利用するのが一般的です。
#!/bin/bash
# 現在の日付を変数に代入(例:2026-05-06)
CURRENT_DATE=$(date +%Y-%m-%d)
TARGET_DIR="backup_${CURRENT_DATE}"
# 変数を使ってディレクトリを作成
mkdir -v "$TARGET_DIR"
このように、動的な値をディレクトリ名に組み込むことで、バックアップ処理などの自動化が容易になります。
実務で注意すべきポイントとトラブルシューティング
mkdirは便利なコマンドですが、実際の運用ではいくつかの落とし穴があります。
特に権限の問題や名前の付け方については注意が必要です。
パーミッションエラー(Permission denied)
システム上の保護された領域(例:/usr/binや/etc配下など)にディレクトリを作成しようとすると、権限不足でエラーになります。
# 一般ユーザーで実行すると失敗する例
mkdir /usr/local/my_tool
mkdir: cannot create directory ‘/usr/local/my_tool’: Permission denied
この場合は、sudoコマンドを使用して管理者権限で実行する必要があります。
ただし、不必要に管理者権限でディレクトリを作成すると、その後のファイル操作も常に管理者権限が必要になってしまうため、作成場所と所有者設定には注意しましょう。
ディレクトリ名にスペースが含まれる場合
ディレクトリ名にスペースを含めることは可能ですが、コマンドライン上では推奨されません。
もしスペースを含む名前を作成したい場合は、引用符(ダブルクォート)で囲むか、バックスラッシュによるエスケープが必要です。
# 引用符で囲む方法
mkdir "My Documents"
# エスケープする方法
mkdir My\ Documents
スペースが含まれるディレクトリは、後のスクリプト処理でバグの原因になりやすいため、基本的にはアンダースコア(_)やハイフン(-)で代用することを強く推奨します。
特殊文字の使用を避ける
ディレクトリ名には、アスタリスク(*)、クエスチョンマーク(?)、セミコロン(;)などの特殊文字を使わないようにしてください。
これらはシェルにとって特別な意味を持つ文字であるため、意図しない動作を引き起こす可能性があります。
まとめ
Bashのmkdirコマンドは、単純なディレクトリ作成ツール以上の役割を果たします。
重要なポイントの振り返り:
-pオプションは、中間ディレクトリの作成と「既に存在する場合のエラー回避」に必須。-mオプションを使えば、作成と同時に適切な権限(755や700など)を付与できる。- Bashのブレース展開を活用することで、複雑な階層構造や連番ディレクトリを一瞬で構築できる。
- 安全な運用のために、ディレクトリ名にはスペースや特殊文字を避け、適切なパス指定を心がける。
これらのテクニックをマスターすることで、環境構築のスピードは劇的に向上し、ミスの少ない安定したシステム運用が可能になります。
日々の業務や学習の中で、ぜひ今回紹介したオプションや効率化のコツを積極的に取り入れてみてください。
