Categories: linux

dirnameコマンドの使い方徹底解説!ディレクトリ名だけを取得する便利コマンド

Linuxでファイルやディレクトリを扱っていると、「このファイルがあるディレクトリだけ取得したい」という場面が意外と多くあります。そんなときに役立つのが dirname コマンドです。ファイルのパスからディレクトリ部分だけを取り出してくれるこのコマンドは、シェルスクリプトを書くときや、パスの操作を自動化したいときにとても便利です。本記事では、dirname コマンドの基本的な使い方から、実用的な応用例、他コマンドとの連携方法まで詳しく解説します。初心者にもわかりやすく丁寧に解説していますので、Linuxに不慣れな方でも安心して読み進められます。


dirnameコマンドとは?

dirname は、指定したパスから「ディレクトリ名だけを取り出す」ためのLinuxコマンドです。パスの最後にファイル名がついている場合、その部分を取り除いて、残ったディレクトリ部分のみを出力します。

例えば次のように使います。

$ dirname /home/user/docs/file.txt
/home/user/docs

このように、ファイル名 file.txt を除いた /home/user/docs というディレクトリパスだけを出力してくれるのが dirname コマンドの役割です。


基本的な使い方

書式

dirname [パス]

引数にフルパスや相対パスを指定するだけでOKです。

例1:フルパスの場合

$ dirname /var/log/nginx/access.log
/var/log/nginx

例2:相対パスの場合

$ dirname ./src/main.c
./src

このように、相対パスであっても適切にディレクトリ部分を抽出してくれます。


basenameコマンドとの違い

dirname の兄弟とも言えるコマンドに basename があります。basename はパスの中から「ファイル名」だけを取り出すコマンドです。

例えば次のように使います。

$ basename /var/log/nginx/access.log
access.log

つまり、dirname はディレクトリ名を、basename はファイル名を抽出するという、ちょうど逆の動きをするコマンドなのです。

この2つはセットで使うと非常に便利です。

$ path="/var/log/nginx/access.log"
$ echo "DIR: $(dirname "$path")"
$ echo "FILE: $(basename "$path")"

スクリプトでの利用例

Linuxでスクリプトを書くときに、dirname を使うことでパスを柔軟に扱えるようになります。

例:現在のスクリプトがあるディレクトリを取得

以下のようなシェルスクリプトを考えてみましょう。

#!/bin/bash

SCRIPT_DIR=$(dirname "$0")
echo "このスクリプトのディレクトリは: $SCRIPT_DIR"

このように $0 でスクリプト自身のパスを取得し、dirname でディレクトリ部分だけを取り出しています。

このテクニックは、同じディレクトリにある他のファイルを読み込むようなスクリプトを作るときに非常に役立ちます。


末尾スラッシュに注意しよう

パスの末尾にスラッシュ / をつけると、思わぬ出力になることがあります。

$ dirname /home/user/docs/
/home/user

このように、/docs/ の末尾スラッシュがあることで、最後のディレクトリがファイル名として解釈されてしまい、/home/user だけが出力されてしまいます。

正確な挙動を得たいときは、スラッシュをつけないように気をつけましょう。


dirnameを使ったパイプ処理の例

dirname は他のコマンドと組み合わせることで、より実用的になります。

例:findと組み合わせてディレクトリ一覧を取得

find . -type f | xargs -n 1 dirname | sort | uniq

このコマンドは、カレントディレクトリ以下にあるすべてのファイルのディレクトリ名をリスト化し、重複を除いて表示します。

  • find . -type f:ファイル一覧を取得
  • xargs -n 1 dirname:1つずつ dirname に渡す
  • sort | uniq:重複を除く

Windowsでの類似コマンドは?

WindowsでもPowerShellを使えば同じようなことが可能です。

Split-Path "C:\Users\User\Documents\file.txt"

このコマンドは dirname と同じく、ファイルパスからディレクトリ部分を取り出してくれます。LinuxとWindowsでスクリプトを共有したいときにも、対応関係を理解しておくと便利です。


まとめ:dirnameはシンプルだけど超便利!

dirname コマンドは、非常にシンプルな機能を持つコマンドですが、スクリプトや日常的なファイル操作においてとても重要な役割を果たします。

  • ファイルパスからディレクトリ名を抽出できる
  • basename と組み合わせて使うと効果的
  • スクリプトの移植性・保守性が向上する
  • find など他のコマンドと組み合わせて集計処理にも応用可能

ぜひ、普段の作業やスクリプト作成の中で dirname を活用してみてください。小さな時短テクニックが積み重なって、効率的なLinuxライフが実現できますよ。

upandup

Web制作の記事を中心に、暮らし、ビジネスに役立つ情報を発信します。 アフィリエイトにも参加しています。よろしくお願いいたします。