dirname - ファイル名のディレクトリ部分を抽出する

dirname

dirnameコマンドは、ファイルのフルパスでのディレクトリ部分を取り出すことができます。
ファイルがある場所に移動をするのに利用することができます。

dirnameコマンドとは

dirnameコマンドは、ファイル名の最後の部分を取り除くことができます。つまり、ファイル名のフルパスの中でファイル部分の文字列を取り除き、ディレクトリ部分を取り出すことができます。
dirnameコマンドとは別にファイル部分を取り出したい場合は、basenameコマンドが利用できます。ファイルのパスがわかっている場合、dirnameコマンドを利用して、ファイルがある場所に移動し、basenameコマンドでそのファイルに対して、コマンドの実行を行うようなことができます。

dirnameコマンドの利用例

ファイル名のディレクトリ部分を取り出す

dirnameコマンドは、ファイルパスが与えられるとファイル部分の文字列を取り除き、ディレクトリ部分を出力します。

コマンド例

$fileの内容

実行結果

ファイルのフルパスを取得するためには、readlinkコマンドやrealpathコマンドが利用することができます。$fileの変数の代入は、以下のようなコマンドが利用することができます。
コマンド例

または

複数のファイルを指定

dirnameコマンドは、複数のファイルを指定することができます。

コマンド例

$fileの内容

実行結果

ルートディレクトリに向かって再帰的にディレクトリを表示
(シェルスクリプト)

dirnameコマンドで取得したパスにもう一度dirnameコマンドを利用すると、一番下の階層のディレクトリ部分の文字列が取り除かれ、一つ上の部分までのディレクトリを表示します。

コマンド例

$fileの内容

dirname $fileの結果

実行結果

この結果からルートディレクトリに向かうまでディレクトリの一覧を表示するシェルスクリプトを作成してみます。
rootdirname.sh(シェルスクリプトの例)

コマンド例

$fileの内容

実行結果

rootdirname.shの処理は再帰関数でも記述が出来そうな感じがしますね。記述してみました。

rootdirname_r.sh(シェルスクリプトの例)

コマンド例

$fileの内容

実行結果

dirnameコマンドは、処理結果も分かりやすく、シェルスクリプトを記述する練習にはちょうどいいコマンドだと思います。

参考

外部リンクGnu Coreutils

外部リンクGnu Coreutils日本語版