Next: , Previous: basename invocation, Up: File name manipulation   [Contents][Index]


18.2 dirname: ファイル名から最後の要素を取り除く

dirname は、各 name からスラッシュで区切られた最後の要素を取り除いて、 残りのすべてを表示する。その際、最後の要素の左右どちらにあるスラッシュも除去される。 name を構成する文字列にスラッシュが一つも含まれない場合、 dirname は (カレントディレクトリを意味する) ‘.’ を表示する。


書式:

dirname [option] name

name は実在するファイル名でなくても構わないが、実在するファイル名ならば、 この操作によって、最後の要素それ自体がディレクトリである場合も含めて、 最後の要素が存在するディレクトリが、利用できる形で表示される。

basenamedirname は合わせて設計されており、もし ‘ls "$name"’ が成功するならば、‘cd "$(dirname "$name")"; ls "$(basename "$name")"’ というコマンドの連続も成功するようになっている。 これは、ファイル名の末尾に改行が付いている場合を除いて、あらゆる場合にうまく行く。

POSIX によれば、name が ‘//’ の場合に、結果がどうなるかは、 実装側で決めてよいことになっている。 GNU の dirname について言うと、/// とが別のものであるプラットフォームでは、結果は ‘//’ になり、 全く区別しないプラットフォームでは、結果は ‘/’ になる。

このプログラムでは、以下のオプションが使える。参照: Common options.

-z
--zero

各行の末尾に改行ではなく、ゼロバイト (ASCII NUL) を出力する。 このオプションを使用すると、出力するデータに、途中に改行を挟むものがあっても、 他のプログラムがその出力を解析できるようになる。

終了ステータス 0 は成功を示し、0 以外の値は失敗を示す。

用例:

# "/usr/bin" を出力する。
dirname /usr/bin/sort
dirname /usr/bin//.//

# "dir1", "dir2" の順に出力する。
dirname dir1/str dir2/str

# "." を出力する。
dirname stdio.h