Categories: linux

basenameコマンドの使い方|パスからファイル名だけを取り出す方法

Linuxのコマンドラインで作業をしていると、ファイルのパスから「ファイル名だけ」を取り出したいという場面によく遭遇します。スクリプトを書く際やログの整形、パスの操作など、さまざまな場面で役に立つのが basename コマンドです。本記事では、basename コマンドの基本的な使い方から、応用例、実用的な使い方までを分かりやすく解説します。Linux初心者の方から中級者まで、ぜひ参考にしてみてください。


basenameコマンドとは?

basename は、与えられたパス(ファイルやディレクトリのフルパス)から、最後の要素、つまりファイル名やディレクトリ名だけを取り出すためのコマンドです。

たとえば、以下のように使います。

basename /home/user/documents/report.txt

このコマンドは report.txt という出力を返します。パスの中で最後のスラッシュ以降の部分、つまり「ファイル名」だけを抽出してくれるのが basename です。


基本的な使い方

1. 単純なファイルパスの処理

basename /path/to/file.txt

出力:

コピーする編集するfile.txt

このように、単にフルパスを指定するだけで、最後の部分が取り出されます。

2. 拡張子を取り除く

basename は、オプションとして「拡張子(suffix)」も指定することができます。

basename /path/to/file.txt .txt

出力:

nginxコピーする編集するfile

このように、拡張子を含めて削除したいときには第二引数に指定することで、拡張子なしのファイル名だけを取得することが可能です。


dirnameとの違い

よく混同されがちなコマンドに dirname があります。

  • basename:パスから「ファイル名」だけを取得
  • dirname:パスから「ディレクトリパス」だけを取得

例:

# ファイル名だけ取得
basename /home/user/data.csv
# => data.csv

# ディレクトリパスだけ取得
dirname /home/user/data.csv
# => /home/user

このように、目的に応じて使い分けることが重要です。


スクリプトでの活用例

1. バックアップスクリプトでの利用

ファイル名を取り出してログ名に利用する例です。

#!/bin/bash
filepath="/home/user/data/report.csv"
filename=$(basename "$filepath")
logfile="/var/log/${filename}.log"

echo "処理中: $filename" >> "$logfile"

このように、basename を使えばログファイル名の命名や、通知メッセージの中にファイル名だけを挿入するなど、柔軟に扱うことができます。


応用:複数ファイルの処理

複数のファイルに対して、basename をループで使うケースです。

for file in /home/user/images/*.jpg; do
name=$(basename "$file" .jpg)
echo "画像ファイル名:$name"
done

これは、画像ファイル名から拡張子を除いて表示する実用的なスクリプトです。例えば画像処理やリネーム処理の準備段階などで活用できます。


xargsとの組み合わせ

大量のファイルを一括処理する際には xargs と組み合わせることもあります。

find /home/user/docs -name "*.txt" | xargs -n 1 basename

このコマンドは、/home/user/docs 以下にあるすべての .txt ファイルの「ファイル名だけ」を一覧表示するものです。ファイル一覧を一括で整形したいときに便利です。


basenameコマンドの注意点

  • パスの末尾にスラッシュがあると、意図しない出力になることがあります。
    • 例:basename /home/user/user
  • ワイルドカードとの併用では、空白や特殊文字に注意が必要です。ダブルクォーテーションで囲む癖をつけましょう。
    • basename "$filepath" のようにするのがベストプラクティスです。

他のコマンドとの比較

コマンド機能
basenameパスからファイル名を取得
dirnameパスからディレクトリパスを取得
realpath相対パスを絶対パスに変換
readlink -fシンボリックリンクを解決しパス出力

これらのコマンドはそれぞれ役割が異なりますが、basename は「ファイル名の抽出」に特化しています。用途に応じて使い分けましょう。


実務での活用場面まとめ

  • ログファイル名の生成
  • ファイルリネームのベースとして使用
  • 拡張子によるフィルタリングや処理分岐
  • バッチ処理スクリプトでのファイル名管理
  • ファイル名のみでの一括処理(例:画像変換、音声変換)

これらの場面で basename を知っていると、処理の幅がぐっと広がります。


まとめ

basename コマンドは、シンプルながら非常に強力なツールです。ファイルパスの中から「名前だけ」を取り出すという基本的な機能ながら、さまざまなスクリプトや自動処理での活用が可能です。

拡張子の削除、他コマンドとの連携、エラーハンドリングの工夫などを知っておくと、日々の作業効率が格段に向上します。ぜひこの機会に basename をマスターし、Linux作業をより快適に進めていきましょう。

upandup

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