カテゴリ: Linuxコマンド集 更新日: 2025/12/09

dirnameコマンドとは?Linuxでパスからディレクトリ部分を抽出する基本

dirnameコマンドとは?Linuxでパスからディレクトリ部分を抽出する基本
dirnameコマンドとは?Linuxでパスからディレクトリ部分を抽出する基本

先生と生徒の会話形式で理解しよう

生徒

「Linuxでファイルのパスから、どこのフォルダにあるかだけを取り出す方法ってありますか?」

先生

「それならdirnameコマンドが便利ですよ。ファイルが入っているディレクトリだけを取り出せます。」

生徒

「ディレクトリって何でしたっけ?」

先生

「ディレクトリとは、Windowsでいう“フォルダ”のことです。dirnameコマンドを使えば、ファイルがどのフォルダにあるかを簡単に知ることができますよ。」

1. dirnameコマンドとは?

1. dirnameコマンドとは?
1. dirnameコマンドとは?

dirname(ディアネーム)コマンドは、Linuxでファイルやディレクトリのパス(場所)からディレクトリ部分だけを取り出すコマンドです。例えば、/home/user/file.txtというパスがあったとき、「どのフォルダにあるのか」を知りたい場合に使います。

パスとは、ファイルやフォルダの場所を示す情報で、/(スラッシュ)で区切られた形で表示されます。Linuxの世界では、すべてのファイルやフォルダはルート(/)から始まるパスで管理されています。

2. dirnameコマンドの基本的な使い方

2. dirnameコマンドの基本的な使い方
2. dirnameコマンドの基本的な使い方

以下のように、コマンドの後ろにパスを指定するだけで、そのパスの中から「フォルダ(ディレクトリ)」だけを抽出できます。


dirname /home/user/file.txt
/home/user

この例では、「file.txt」はファイル名で、「/home/user」がファイルが入っているフォルダの場所です。

3. 相対パスでも使える

3. 相対パスでも使える
3. 相対パスでも使える

dirnameコマンドは、絶対パスだけでなく、カレントディレクトリ(現在の場所)からの相対パスにも使えます。


dirname Documents/report.txt
Documents

ここでは「Documents」フォルダの中にある「report.txt」というファイルの親ディレクトリ(=Documents)が出力されます。

4. ファイル名だけの入力では「.(カレントディレクトリ)」

4. ファイル名だけの入力では「.(カレントディレクトリ)」
4. ファイル名だけの入力では「.(カレントディレクトリ)」

もしパスの中にディレクトリが含まれていない(ファイル名だけ)の場合、dirnameは「現在の場所(カレントディレクトリ)」を意味する.(ドット)を返します。


dirname file.txt
.

この「.」は、今いるディレクトリを指す記号で、Linuxの基本的な表現方法です。

5. 複数スラッシュがある場合でも安心

5. 複数スラッシュがある場合でも安心
5. 複数スラッシュがある場合でも安心

スラッシュが重なっていても、自動的に1つにして正しく処理してくれます。


dirname /home//user///file.txt
/home/user

スラッシュがいくつ重なっていても、Linuxは1つの区切りとして認識してくれます。

6. basenameコマンドとの違い

6. basenameコマンドとの違い
6. basenameコマンドとの違い

dirnameとよくセットで使われるのがbasename(ベースネーム)コマンドです。dirnameが「フォルダ名」を取り出すのに対して、basenameは「ファイル名」だけを取り出します。


basename /home/user/file.txt
file.txt

このように使い分けることで、スクリプトやコマンドの中で柔軟にパス処理ができます。

7. dirnameコマンドを使った簡単スクリプト例

7. dirnameコマンドを使った簡単スクリプト例
7. dirnameコマンドを使った簡単スクリプト例

例えば、あるスクリプトの中で、指定されたパスの中からフォルダ部分を取り出したいときにはこう書きます:


#!/bin/bash
path="/var/www/html/index.html"
dir=$(dirname "$path")
echo "ディレクトリは: $dir"

このスクリプトを実行すると、次のような結果になります。


ディレクトリは: /var/www/html

このように、dirnameはスクリプトの中でも非常に役立つ基本コマンドのひとつです。

8. ファイルが実際に存在しなくても使える

8. ファイルが実際に存在しなくても使える
8. ファイルが実際に存在しなくても使える

dirnameは、パスとして書かれた文字列を処理するだけなので、実際にそのファイルが存在しなくてもエラーになりません。


dirname /tmp/hoge/fuga/test.txt
/tmp/hoge/fuga

このように、存在確認ではなく「文字列としてのパス構造」を解析する目的で使えます。

9. dirnameはパイプと組み合わせても便利

9. dirnameはパイプと組み合わせても便利
9. dirnameはパイプと組み合わせても便利

他のコマンドと組み合わせて、処理結果をdirnameに渡す使い方もできます。


find . -name "*.log" | xargs -n1 dirname
./logs
./var/log
./tmp

この例では、拡張子が.logのファイルを探し、そのフォルダだけを一覧表示しています。

まとめ

まとめ
まとめ

ここまで、dirnameコマンドの基本から応用までを丁寧に見てきました。Linuxにおけるパスの扱いは、初心者が特につまずきやすい部分ですが、dirnameのようなシンプルで明確なコマンドを理解しておくことで、パス操作の基礎がしっかりと身に付きます。特に、ディレクトリ部分だけを取り出すという処理は、ファイル配置の把握、設定ファイルの参照、スクリプト作成など、さまざまな場面で必要になります。

dirnameは「パスの文字列を処理するコマンド」であり、実際にファイルが存在しなくても問題なく動作するという点が大きな特徴です。存在確認が目的ではなく、あくまでパス構造を解析する目的で使うため、複雑なネスト構造のチェックや、スクリプトで動的にパスを扱う時に非常に頼りになります。また、スラッシュが複数重なっていても自動的に整理して処理してくれるため、ユーザーが意識せずに使っても問題が起きにくいことも魅力のひとつです。

さらに、絶対パスだけでなく相対パスでもそのまま利用できる柔軟性は、日常的な作業からスクリプトの中まで幅広く活躍する理由となっています。カレントディレクトリを示す「.」が返される仕組みも、Linuxのパスの概念を理解する上で重要であり、dirnameを使うことで自然とLinuxの基本表現に慣れていくことができます。basenameと組み合わせれば、パス全体から必要な情報だけを切り分けるという操作が容易になり、より正確で読みやすいスクリプト作成につながります。

また、findコマンドやxargsと組み合わせたパイプ処理は、実務で頻繁に使われる重要なテクニックであり、ログの整理や大量のファイル調査を効率化する際に非常に役立ちます。「ファイルの一覧を取得し、そのディレクトリだけを抽出する」という処理は、スクリプト作成でも重宝されるため、dirnameを自在に使いこなせるようになると、Linux作業全体が大幅にスムーズになります。

以下に、より応用的なdirnameの使い方を示す追加例を紹介します。

追加サンプル:複数ファイルの親ディレクトリをまとめて処理する

例えば、現在のディレクトリ配下にある設定ファイル(.conf)の場所だけを一覧で取得したい場合、dirnameを次のように活用できます。


find . -name "*.conf" | xargs -n1 dirname
./config
./system/conf
./modules

この処理により、設定ファイルの保存場所を効率よく把握でき、設定の確認作業やバックアップ作業の準備に役立ちます。実際のシステム管理では、複数の設定ディレクトリを把握しておく必要がある場面が多いため、この操作は非常に便利です。

追加サンプル:dirnameを使ったディレクトリ作成スクリプト

指定されたパスにファイルを作成したいが、ディレクトリが存在するか不安な場合にもdirnameを利用できます。


#!/bin/bash
target="/var/www/project/assets/style.css"
dir=$(dirname "$target")
mkdir -p "$dir"
touch "$target"

このスクリプトは、必要なディレクトリがなければ自動で作成し、空のファイルを生成します。dirnameを使うことで、パスからフォルダ部分を安全に抽出し、確実なディレクトリ操作につなげられる良い例です。

先生と生徒の振り返り会話

生徒

「dirnameって思ったよりシンプルなのに、すごく使い道が広いですね!」

先生

「その通りです。パスから必要な部分だけ取り出せるので、スクリプトでも日常作業でも大活躍しますよ。」

生徒

「スクリプトの中でdirnameを使えば、自動でフォルダ作成もできるなんて便利ですね。」

先生

「パス操作を理解しておくと、Linuxの扱いがぐっと楽になります。basenameと一緒に覚えておくとさらに便利ですよ。」

生徒

「findと組み合わせる使い方も実際に役立ちそうです。ログの整理とかで試してみたいです!」

先生

「ぜひ挑戦してみてください。dirnameは基本ですが、確実に理解するとLinux全体がもっと身近に感じられますよ。」

生徒

「今日学んだ内容を実際の環境で試して、しっかり使えるようになりたいと思います!」

関連記事:
カテゴリの一覧へ
新着記事
New1
テキスト・データ処理
grep -hオプションの使い方|ファイル名を表示せずに一致行だけを出力する方法
New2
ファイル・ディレクトリ操作
find -mindepthオプションの使い方を完全ガイド!検索の最小深さを指定して効率よくファイル検索
New3
ファイル・ディレクトリ操作
Linuxのlsコマンド-iオプション完全ガイド!初心者でもわかるi-node番号の表示方法
New4
ファイル・ディレクトリ操作
stat --dereferenceオプションの使い方を解説|-Lと同じようにシンボリックリンク先の情報を表示しよう
人気記事
No.1
Java&Spring記事人気No1
ファイル・ディレクトリ操作
findコマンドの使い方を完全ガイド!初心者でもわかるLinuxのファイル検索の基本
No.2
Java&Spring記事人気No2
テキスト・データ処理
grepコマンドとは?Linuxで文字列を検索する基本をやさしく解説!
No.3
Java&Spring記事人気No3
ファイル・ディレクトリ操作
cd ~ の使い方を完全解説!ホームディレクトリへの移動方法と初心者向けLinuxコマンド入門
No.4
Java&Spring記事人気No4
ファイル・ディレクトリ操作
statコマンドとは?Linuxでファイルやディレクトリの詳細情報を確認する基本