GNU Core Utilities/basename
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 版といくつか違いがあります。
主な違い:
編集-s
(拡張子を削除する)オプションの挙動が異なる- FreeBSD の
basename
では拡張子を削除する際、完全一致する文字列を削除します。GNU 版では、拡張子の部分だけが削除される。
- FreeBSD の
-z
(null 文字区切り)のサポートがない- FreeBSD 版の
basename
では、-z
オプションがサポートされていません。
- FreeBSD 版の
- GNU coreutils 版を FreeBSD で使う方法
coreutils
パッケージをインストールするとgbasename
という名前で GNU 版のbasename
が使える。
pkg install coreutils gbasename /home/user/docs/file.txt # GNU版の basename を使用
詳しくは、それぞれの環境で man basename
を確認してください。