basenameコマンドとは?Linuxでパスからファイル名を抽出する基本
生徒
「Linuxで、ファイルのパスからファイル名だけを取り出す方法ってありますか?」
先生
「その場合は、basenameというコマンドを使うと便利ですよ。」
生徒
「basenameってどんなコマンドなんですか?」
先生
「じゃあ、一緒にbasenameコマンドの使い方を学んでみましょう!」
1. basenameコマンドとは?
basenameコマンドは、Linuxでパス(ファイルの場所)からファイル名だけを取り出すために使うコマンドです。たとえば、/home/user/document.txtという長いパスがあったときに、「document.txt」というファイル名だけを取り出すことができます。
ファイルのパスには、フォルダ(ディレクトリ)の名前や区切りが含まれていて、初心者には少しわかりにくいことがあります。しかしbasenameを使えば、その中から必要な名前だけを簡単に取り出すことができます。
2. basenameコマンドの基本的な使い方
まずは、最も基本的な使い方を見てみましょう。以下のように、パスを引数として指定します。
basename /home/user/file.txt
file.txt
このように、パスの中から最後の部分、つまりファイル名だけが表示されるのが特徴です。
3. ディレクトリでも使えるの?
basenameコマンドは、ファイルだけでなくディレクトリにも使えます。例えば次のような場合です。
basename /var/log/apache2
apache2
この例では、「/var/log/apache2」というフォルダの中から、最後の「apache2」だけを取り出しています。フォルダでも最後の部分だけを抜き出せる、ということです。
4. 拡張子を取り除く使い方
basenameコマンドには、ファイル名から特定の文字列(通常は拡張子)を削除する機能もあります。次のように使います。
basename report.csv .csv
report
このように、指定した拡張子部分「.csv」だけを削除して表示することができます。「.txt」や「.log」なども同じように扱えます。
5. basenameコマンドの使用例をもっと見てみよう
実際に現場でよく使われるケースをいくつか紹介します。以下のような場面で活躍します。
スクリプト内でファイル名を取り出したいとき
filepath="/home/user/data/report.log"
filename=$(basename "$filepath")
echo "$filename"
report.log
このように、変数の中にあるパスから、ファイル名だけを変数に取り出す使い方は非常に多くの場面で活躍します。
シェルスクリプトでログ出力先を決めたいとき
logfile="/var/log/nginx/access.log"
basename "$logfile" .log
access
このように拡張子だけを除いたログファイル名を使うことで、処理の流れを柔軟に制御することができます。
6. dirnameとの違いに注意しよう
basenameと似た名前のコマンドにdirnameがあります。こちらはパスの中の「フォルダの部分」だけを取り出すコマンドです。
dirname /home/user/file.txt
/home/user
このように、basenameがファイル名だけを取り出すのに対して、dirnameはそのファイルがあるフォルダの場所を取り出す、という違いがあります。
7. basenameのオプションは少なめ
basenameは非常にシンプルなコマンドなので、オプションはほとんどありません。主に次のようなものがあります。
--version:バージョン情報を表示--help:使い方のヘルプを表示
basename --version
basename (GNU coreutils) 8.32
Copyright (C) 2020 Free Software Foundation, Inc.
8. basenameコマンドを活用するコツ
basenameは、単体で使うだけでなく、他のコマンドやスクリプトと組み合わせることで真価を発揮します。特に、for文などの繰り返し処理の中で、ファイル名を取り出して処理を分けるときなどに非常に便利です。
for path in /home/user/*.txt; do
name=$(basename "$path" .txt)
echo "ファイル名は $name です"
done
ファイル名は report です
ファイル名は data です
ファイル名は memo です
このように、複数のファイルに対して一括でファイル名を取り出して処理することができます。