Linux dirname コマンド

Linux 命令大全Linux コマンド大全


dirname コマンドとは

dirnameLinux/Unix システムにおいて、シンプルですが実用的なコマンドラインツールで、ファイルパスからディレクトリ部分を抽出するために使用します。パス内の親ディレクトリを手動で文字列解析することなく、素早く取得するのに役立ちます。

基本機能

  • 入力: 1つのファイルパス文字列
  • 出力: そのパスのディレクトリ部分(最後のスラッシュより後ろを除いた内容)

コマンド構文

dirname [选项] 文件名...

パラメータ説明

  • ファイル名: 1つまたは複数のファイルパスを指定可能(絶対パスと相対パスをサポート)
  • **...**:複数のファイルパスを同時に処理できることを示します

オプションパラメータ

ほとんどの場合、dirnameオプションは不要ですが、GNU 版では以下の標準オプションをサポートしています:

オプション 説明
-z 出力を改行文字ではなく NUL 文字(\0)で区切ります
--help ヘルプ情報を表示
--version バージョン情報を表示

動作原理

dirnameコマンドは以下の手順でパスを処理します:

  1. パス末尾のすべてのスラッシュ(/)を削除
  2. 最後のスラッシュとその後のすべての文字を削除
  3. 結果が空の場合は "."(現在のディレクトリ)を出力

処理フローチャート


使用例

基本用法

例

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

$ dirname relative/path/to/file
relative/path/to

複数ファイルの処理

例

$ dirname /a/b/c.txt /x/y/z.txt
/a/b
/x/y

特殊なパスの処理

例

$ dirname /usr/bin/      # 末尾のスラッシュに注意
/usr

$ dirname file.txt       # ファイル名のみ
.

$ dirname /              # ルートディレクトリ
/

スクリプトでの使用

例

#!/bin/bash

# スクリプトが置かれているディレクトリを取得
SCRIPT_DIR=$(dirname "$0")
echo "スクリプトディレクトリ:$SCRIPT_DIR"

# 設定ファイルパスのディレクトリを取得
CONFIG_PATH="/etc/app/config.cfg"
CONFIG_DIR=$(dirname "$CONFIG_PATH")
echo "設定ディレクトリ:$CONFIG_DIR"

よくある使用シーン

1. スクリプトのディレクトリを取得

例

#!/bin/bash
# スクリプトが置かれている絶対パスを取得
SCRIPT_DIR=$(dirname "$(readlink -f "$0")")
echo "スクリプトのディレクトリ:$SCRIPT_DIR"

2. 相対パスの構築

例

# ファイルが特定のディレクトリのサブディレクトリにあると仮定します
BASE_DIR="/var/log"
FULL_PATH="$BASE_DIR/app/error.log"

# ログディレクトリを取得
LOG_DIR=$(dirname "$FULL_PATH")

3. basename と組み合わせて使用

例

# 完全なパスを分解
FULL_PATH="/home/user/docs/report.pdf"

DIR=$(dirname "$FULL_PATH")
FILE=$(basename "$FULL_PATH")

echo "ディレクトリ:$DIR"
echo "ファイル名:$FILE"

注意事項

シンボリックリンク:dirnameシンボリックリンクは解決されません。解決するには、readlinkを使用します

例

dirname "$(readlink -f "/path/with/symlink")"

スペースの処理: パスにスペースが含まれる場合は、引用符を使用してください

例

dirname "/path/with spaces/file.txt"

相対パス: 出力結果は相対パスの形式を維持します

例

$ dirname ../parent/file.txt
../parent

空の入力: 引数が指定されない場合、GNU 版は "." を出力しますが、これは POSIX 標準の動作ではありません


類似コマンドとの比較

コマンド 機能 入力例 出力例
dirname ディレクトリ部分を抽出 /a/b/c.txt /a/b
basename ファイル名部分を抽出 /a/b/c.txt c.txt
realpath 絶対パスを取得(シンボリックリンクを解決) ../file /full/path/to/file

実践演習

テストファイルを作成し、そのディレクトリパスを取得する

例

touch /tmp/testfile
dirname /tmp/testfile

自身が置かれているディレクトリを表示するスクリプトを作成

例

#!/bin/bash
echo "本スクリプトの場所:$(dirname "$0")"

スペースや特殊文字を含むパスの処理を試す

例

mkdir -p "/tmp/my dir"
touch "/tmp/my dir/special file.txt"
dirname "/tmp/my dir/special file.txt"

Linux 命令大全Linux コマンド大全

その他の拡張