basenameはファイルやディレクトリのパス名からファイル名やディレクトリ名を抽出するコマンドだ。
このページでは基本的なbasenameの使い方を解説する。応用方法も併せて紹介するので、ぜひ、この機会に覚えておいてほしい。
コマンドの基本
コマンドの基本動作
使い方は、次のとおり簡単だ。
$ basename パス名
パス名からファイル名を取り出すにはこれだけだ。
パス名「/home/Jim/music/MySound.wav」からファイル名「MySound.wav」を抽出する場合は、次のコマンドだ。
$ basename /home/Jim/music/MySound.wav
ファイル名「MySound.wav」が抽出できた。
拡張子を抽出しない
抽出内容にファイル名の拡張子を含めないこともできる。
その場合の書式は次の通りだ。
$ basename パス名 拡張子
拡張子はピリオドなどの接続語も含め、入力する。
パス名「/home/Jim/music/MySound.wav」からファイル名「MySound.wav」を抽出し、拡張子.wavを含めず表示する場合は、次のコマンドだ。
$ basename /home/Jim/music/MySound.wav .wav
ファイル名「MySound」が抽出できた。
コマンドの動作原理
実はbasenameコマンドは、パス名に指定されている文字に対し、一番右側の/以降を抜き出している動作だ。
拡張子が指定されているのであれば、そこから拡張子を削除する。
つまり、存在しないパス名を指定してもエラーにならず、適宜結果を表示するわけだ。
ただし、パス名にワイルドカードを指定すると、ファイルを検索しようとする動きを見せる。
$ basename hogehoge/*
一番初めにワイルドカードに該当するファイルが表示されるようになる。
basename関連コマンド
最後にbasenameコマンドに関連して、基本的なパス名を操作するコマンドも紹介しておく
dirnameコマンド
パス名からファイル名を削除したものを表示する。
まとめ
basenameコマンドにより、パス名からファイル名を抽出する方法を解説した。
シェルスクリプトなどで使える場面があるコマンドなので、存在だけでも知っておこう。
そのコマンドではbasenameにワイルドカードが渡っていないと思います。
カレントディレクトリのファイル名,ディレクトリ名が渡っていると思います。
shell次第ですが、bashですと
basename '*'
または
basename \*
としなくてはなりません。
ご指摘ありがとうございます。修正いたします。
修正されたようですが、意図が伝わっていないようです。
$ basename hogehoge/*
上記のコマンドでは*はshellによって展開されますので、basenameには*は渡されず、展開後の文字列が渡されます。
ですので、この場合はbasenameがワイルドカードの処理をしていることにはなりません。