Next: pathchk invocation, Previous: basename invocation, Up: File name manipulation [Contents][Index]
dirname
: ファイル名から最後の要素を取り除くdirname
は、各 name からスラッシュで区切られた最後の要素を取り除いて、
残りのすべてを表示する。その際、最後の要素の左右どちらにあるスラッシュも除去される。
name を構成する文字列にスラッシュが一つも含まれない場合、
dirname
は (カレントディレクトリを意味する) ‘.’ を表示する。
書式:
dirname [option] name…
name は実在するファイル名でなくても構わないが、実在するファイル名ならば、 この操作によって、最後の要素それ自体がディレクトリである場合も含めて、 最後の要素が存在するディレクトリが、利用できる形で表示される。
basename
と dirname
は合わせて設計されており、もし ‘ls "$name"’
が成功するならば、‘cd "$(dirname "$name")"; ls "$(basename "$name")"’
というコマンドの連続も成功するようになっている。
これは、ファイル名の末尾に改行が付いている場合を除いて、あらゆる場合にうまく行く。
POSIX によれば、name が ‘//’ の場合に、結果がどうなるかは、
実装側で決めてよいことになっている。
GNU の dirname
について言うと、// と /
とが別のものであるプラットフォームでは、結果は ‘//’ になり、
全く区別しないプラットフォームでは、結果は ‘/’ になる。
このプログラムでは、以下のオプションが使える。参照: Common options.
各行の末尾に改行ではなく、ゼロバイト (ASCII NUL) を出力する。 このオプションを使用すると、出力するデータに、途中に改行を挟むものがあっても、 他のプログラムがその出力を解析できるようになる。
終了ステータス 0 は成功を示し、0 以外の値は失敗を示す。
用例:
# "/usr/bin" を出力する。 dirname /usr/bin/sort dirname /usr/bin//.// # "dir1", "dir2" の順に出力する。 dirname dir1/str dir2/str # "." を出力する。 dirname stdio.h