basename コマンドは、パス名からファイル名やディレクトリ名を取り出すためのコマンドです。ファイルパスからディレクトリ部分を削除して、ファイル名だけを表示するのに使用されます。GNU coreutils に含まれており、Linux では GNU 版が、FreeBSD では BSD 版が提供されています。基本的な動作は共通していますが、細かなオプションの違いがあります。

基本的な使い方

編集
basename [パス名] [拡張子]

主なオプション(GNU coreutils版)

編集
主なオプション
オプション 説明
-s, --suffix 指定した拡張子を削除する
-z, --zero 出力を null 文字(\0)で区切る

パスからファイル名を抽出

編集
basename /home/user/docs/file.txt

/home/user/docs/file.txt のファイル名部分である file.txt を表示。

パスから拡張子を除いたファイル名を抽出

編集
basename /home/user/docs/file.txt .txt

/home/user/docs/file.txt から拡張子 .txt を除いたファイル名部分である file を表示。

null 文字で区切った出力

編集
basename -z /home/user/docs/file.txt

/home/user/docs/file.txt を null 文字で区切った出力を表示。

FreeBSD 版との違い

編集

FreeBSD でも basename コマンドは提供されていますが、GNU coreutils 版といくつか違いがあります。

主な違い:

編集
  1. -s(拡張子を削除する)オプションの挙動が異なる
    • FreeBSD の basename では拡張子を削除する際、完全一致する文字列を削除します。GNU 版では、拡張子の部分だけが削除される。
  2. -z(null 文字区切り)のサポートがない
    • FreeBSD 版の basename では、-z オプションがサポートされていません。
  3. GNU coreutils 版を FreeBSD で使う方法
    • coreutils パッケージをインストールすると gbasename という名前で GNU 版の basename が使える。
    pkg install coreutils
    gbasename /home/user/docs/file.txt  # GNU版の basename を使用
    

詳しくは、それぞれの環境で man basename を確認してください。