dirnameコマンドとは?Linuxでパスからディレクトリ部分を抽出する基本
生徒
「Linuxでファイルのパスから、どこのフォルダにあるかだけを取り出す方法ってありますか?」
先生
「それならdirnameコマンドが便利ですよ。ファイルが入っているディレクトリだけを取り出せます。」
生徒
「ディレクトリって何でしたっけ?」
先生
「ディレクトリとは、Windowsでいう“フォルダ”のことです。dirnameコマンドを使えば、ファイルがどのフォルダにあるかを簡単に知ることができますよ。」
1. dirnameコマンドとは?
dirname(ディアネーム)コマンドは、Linuxでファイルやディレクトリのパス(場所)からディレクトリ部分だけを取り出すコマンドです。例えば、/home/user/file.txtというパスがあったとき、「どのフォルダにあるのか」を知りたい場合に使います。
パスとは、ファイルやフォルダの場所を示す情報で、/(スラッシュ)で区切られた形で表示されます。Linuxの世界では、すべてのファイルやフォルダはルート(/)から始まるパスで管理されています。
2. dirnameコマンドの基本的な使い方
以下のように、コマンドの後ろにパスを指定するだけで、そのパスの中から「フォルダ(ディレクトリ)」だけを抽出できます。
dirname /home/user/file.txt
/home/user
この例では、「file.txt」はファイル名で、「/home/user」がファイルが入っているフォルダの場所です。
3. 相対パスでも使える
dirnameコマンドは、絶対パスだけでなく、カレントディレクトリ(現在の場所)からの相対パスにも使えます。
dirname Documents/report.txt
Documents
ここでは「Documents」フォルダの中にある「report.txt」というファイルの親ディレクトリ(=Documents)が出力されます。
4. ファイル名だけの入力では「.(カレントディレクトリ)」
もしパスの中にディレクトリが含まれていない(ファイル名だけ)の場合、dirnameは「現在の場所(カレントディレクトリ)」を意味する.(ドット)を返します。
dirname file.txt
.
この「.」は、今いるディレクトリを指す記号で、Linuxの基本的な表現方法です。
5. 複数スラッシュがある場合でも安心
スラッシュが重なっていても、自動的に1つにして正しく処理してくれます。
dirname /home//user///file.txt
/home/user
スラッシュがいくつ重なっていても、Linuxは1つの区切りとして認識してくれます。
6. basenameコマンドとの違い
dirnameとよくセットで使われるのがbasename(ベースネーム)コマンドです。dirnameが「フォルダ名」を取り出すのに対して、basenameは「ファイル名」だけを取り出します。
basename /home/user/file.txt
file.txt
このように使い分けることで、スクリプトやコマンドの中で柔軟にパス処理ができます。
7. dirnameコマンドを使った簡単スクリプト例
例えば、あるスクリプトの中で、指定されたパスの中からフォルダ部分を取り出したいときにはこう書きます:
#!/bin/bash
path="/var/www/html/index.html"
dir=$(dirname "$path")
echo "ディレクトリは: $dir"
このスクリプトを実行すると、次のような結果になります。
ディレクトリは: /var/www/html
このように、dirnameはスクリプトの中でも非常に役立つ基本コマンドのひとつです。
8. ファイルが実際に存在しなくても使える
dirnameは、パスとして書かれた文字列を処理するだけなので、実際にそのファイルが存在しなくてもエラーになりません。
dirname /tmp/hoge/fuga/test.txt
/tmp/hoge/fuga
このように、存在確認ではなく「文字列としてのパス構造」を解析する目的で使えます。
9. dirnameはパイプと組み合わせても便利
他のコマンドと組み合わせて、処理結果をdirnameに渡す使い方もできます。
find . -name "*.log" | xargs -n1 dirname
./logs
./var/log
./tmp
この例では、拡張子が.logのファイルを探し、そのフォルダだけを一覧表示しています。