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 です
このように、複数のファイルに対して一括でファイル名を取り出して処理することができます。
まとめ
今回の記事では、Linuxでパス文字列からファイル名やディレクトリ名だけを抽出するために使われるbasenameコマンドについて、基礎から実践的な使い方まで詳しく解説してきました。basenameは非常にシンプルなコマンドですが、シェル操作やシェルスクリプトの中では欠かせない存在であり、Linuxを使いこなすうえで必ず身につけておきたい基本コマンドの一つです。
Linuxでは、ファイルやディレクトリはパスという形で表現されます。パスには階層構造が含まれており、長くて読みにくくなることも少なくありません。basenameコマンドを使うことで、そのパスの中から一番最後の要素だけを取り出すことができ、ファイル名やディレクトリ名を簡単に扱えるようになります。
基本的な使い方はとても簡単で、basenameの後にパスを指定するだけです。これだけで、フルパスの中からファイル名のみが表示されます。さらに、第二引数として拡張子を指定すれば、特定の文字列を削除した状態で表示することも可能です。この機能は、拡張子を除いた名前を使って処理を分岐したい場合や、ログファイル名やデータファイル名を加工したい場面で特に役立ちます。
basenameはファイルだけでなくディレクトリにも使える点も重要なポイントです。Linuxではディレクトリもパスで表現されるため、最後のディレクトリ名だけを取得したいときにもbasenameが活躍します。ディレクトリ構造を扱うスクリプトや、処理対象の名前を動的に決めたい場合など、幅広い用途があります。
また、basenameは単体で使うよりも、シェルスクリプトやfor文、変数展開と組み合わせることで本領を発揮します。大量のファイルを一括で処理する場面では、パスからファイル名を取り出して処理内容を切り替える、といった使い方がよく行われます。Linuxの自動化や効率化を目指すうえで、basenameの理解は避けて通れません。
以下は、一般ユーザーでbasenameを使い、複数のファイルパスから拡張子を除いたファイル名を取得する代表的な例です。
for path in /home/user/*.log; do
name=$(basename "$path" .log)
echo "$name"
done
access
error
system
このように、basenameを使えば、パスの扱いがぐっと分かりやすくなり、処理の柔軟性も高まります。dirnameコマンドとの違いを正しく理解し、「ファイル名が欲しいときはbasename」「ディレクトリの場所が欲しいときはdirname」と使い分けることが、Linux操作をスムーズにするコツです。
basenameコマンドはオプションが少なく覚えやすいため、Linux初心者でもすぐに実践で使えるのが魅力です。一方で、スクリプトの中では非常に重要な役割を担うため、早い段階で慣れておくことで、今後のLinux学習や実務作業が格段に楽になります。
生徒「basenameを使えば、長いパスからファイル名だけを簡単に取り出せるんですね。」
先生「その通りです。シェルスクリプトでは特に出番が多いコマンドですよ。」
生徒「拡張子を指定して削除できるのも便利だと思いました。」
先生「ログ処理やファイル名の加工では、よく使われる書き方ですね。」
生徒「dirnameとの違いも分かってきました。役割が逆なんですね。」
先生「良い理解です。basenameとdirnameを使い分けられるようになると、Linuxのパス操作は一気に楽になりますよ。」