basenameのSUFFIX指定で拡張子を除いてファイル名を取得する方法を解説!初心者向けLinuxコマンド講座
生徒
「Linuxでファイルの名前だけを取り出したいんですけど、拡張子はいらないんです。どうすればいいですか?」
先生
「その場合は、basenameコマンドのSUFFIX指定を使うと便利ですよ。」
生徒
「SUFFIXってなんですか?難しそう…」
先生
「心配しないで。とてもシンプルだから、わかりやすく説明しますね!」
1. basenameコマンドとは?
basenameコマンドは、フルパス(ディレクトリ名を含むファイルの位置情報)から、末尾のファイル名だけを抽出するためのLinux標準コマンドです。
例えば、/home/user/documents/report.txt という長い住所のようなパスがあったとき、私たちが本当に知りたいのは report.txt という名前だけであることが多いですよね。この「名前だけ」をサッと取り出してくれるのが basename の役割です。
「東京都千代田区1-1-1 〇〇ビル」という住所から、「〇〇ビル」という建物名だけを抜き出す作業に似ています。
プログラミング未経験の方でも、まずは以下の簡単な実行例を見てみましょう。ターミナル(コマンド入力画面)でこのように入力します。
basename /var/www/html/index.html
index.html
実行結果を見ると、ディレクトリ部分(/var/www/html/)が切り捨てられ、ファイル名である index.html だけが表示されました。このように複雑な階層構造を無視して、対象のファイルが「何という名前か」を特定したいときに非常に重宝します。
主な利用シーンとしては、大量のファイルを処理するシェルスクリプトの中で、特定のファイル名に基づいてログを出力したり、保存先の名前に反映させたりする場合によく活用されます。
2. basenameの基本的な使い方
まずは、オプションや追加の指定を何も行わない、最も標準的なbasenameコマンドの動作を確認してみましょう。このコマンドの役割は、ディレクトリの階層構造(パス)を切り離して、純粋な「ファイル名」だけを表示させることです。
例えば、あなたがパソコンの中で「画像フォルダ」の中にある「image.jpg」というファイルを見ていると想像してください。システム上のフルパスで指定しても、basenameを使えばファイル名だけを取り出すことができます。
basename /home/user/photos/image.jpg
image.jpg
上記の実行結果を見ると、ファイルが保存されている場所(/home/user/photos/)がすべて取り除かれ、末尾にある image.jpg だけが表示されました。これは、ファイルがどこにあるかではなく、そのファイル自体が「何という名前か」を確認したいときに非常に便利です。
通常の使い方の場合は、実行結果に
.jpg や .txt といった拡張子が含まれたままになります。もし、この拡張子さえも消して「名前だけ」にしたい場合に使うのが、次に解説する「SUFFIX(接尾辞)」の指定です。
プログラミングやサーバーの管理では、このようにパスからファイル名だけを抽出する操作が頻繁に行われます。まずはこの「一番後ろの名前だけを拾ってくる」という感覚を掴んでおきましょう。
3. SUFFIXを指定して拡張子を除外する方法
basenameコマンドの真骨頂は、第2引数に除外したい文字列(SUFFIX)を指定できる点にあります。これを利用することで、ファイル名から拡張子をきれいに取り除いた状態で取得することが可能になります。
「SUFFIX(サフィックス)」とは日本語で「接尾辞」を意味し、言葉の末尾に付く文字のことを指します。Linuxの世界では、主にファイルの種類を判別する.jpgや.txtといった拡張子のことをイメージすると分かりやすいでしょう。
basename [対象のパス] [除外したい拡張子]
それでは、プログラミング未経験の方でも直感的に理解できるよう、具体的な実行例を見てみましょう。例えば、写真ファイル image.jpg から名前だけを抜き出したい場合は、以下のように入力します。
basename /home/user/photos/image.jpg .jpg
image
実行結果を確認すると、ファイル名の後ろについていた .jpg が消え、純粋なファイル名の image だけが表示されました。このように、コマンドの最後に「消したい拡張子」を添えるだけで、システムは自動的にその部分をカットしてくれます。
この機能は、特に「元のファイル名を使って、別の形式に作り変えたい」という場面で非常に強力なツールとなります。例えば、画像のリサイズ処理や、データファイルの変換作業など、拡張子を付け替えたいときに basename で一旦名前だけを取り出すテクニックは、効率的なPC操作の第一歩といえるでしょう。
4. 複数の拡張子がある場合は?
Linuxを操作していると、.tar.gz のようにピリオドが2つ以上続く「二重の拡張子」を持つファイルに出会うことがあります。これは、複数のファイルを1つにまとめた後に圧縮した場合によく見られる形式です。このような場合でも、basenameコマンドのSUFFIX(サフィックス)指定は非常に正確に機能します。
まずは、一番後ろの .gz だけを取り除いてみましょう。圧縮ファイルの名前から、中身のアーカイブ名を知りたいときに使う操作です。
basename /home/user/data/archive.tar.gz .gz
archive.tar
実行結果を見ると、指定した .gz だけが消え、.tar が残っているのがわかりますね。では、拡張子をすべて取り除いて「ファイル名そのもの」だけにしたい場合はどうすればよいでしょうか?その答えは、取り除きたい部分をまとめて指定することです。
basename /home/user/data/archive.tar.gz .tar.gz
archive
このように .tar.gz と続けて記述することで、複雑な拡張子も一気にカットして、スッキリとした名前だけを取り出すことができます。プログラミング未経験の方でも、「後ろから消したい文字をそのまま書く」というルールさえ覚えておけば、どんな複雑なファイル名でも自由自在に扱えるようになります。
SUFFIX指定は、あくまで「末尾から一致する文字列」を探して削除します。そのため、ファイル名の途中にある文字を消すことはできません。必ず「お尻からどこまでを消すか」を意識するのがコツです。
5. 拡張子以外の文字列も除外できる?
basenameコマンドのSUFFIX(接尾辞)指定は、実は「.txt」や「.jpg」といった拡張子専用の機能ではありません。仕組みとしては、指定した文字列がファイル名の末尾に一致すれば、どんな文字でも切り取ってくれるという非常に柔軟なルールになっています。
例えば、システムが自動生成したバックアップファイルや、日付が含まれるファイル名から、特定の識別子だけを取り除きたい場合に役立ちます。具体的に、ファイル名の末尾に _backup という識別子がついているケースを考えてみましょう。
basename /home/user/work/data_2026_backup _backup
data_2026
実行結果を見ると、拡張子ではない _backup という文字列が綺麗に削除され、前半部分の data_2026 だけが残りました。このように、ピリオド(.)で始まらない文字列であっても、末尾に存在していれば削除の対象にできるのです。
「ファイル名_old」を「ファイル名」に戻したり、一時的な作業用ファイルにつけた「_tmp」を一括で無視して名前を取得したりする際に非常に便利です。
プログラミングに慣れていない方は、まず「消したい文字が一番後ろにあるなら、それをそのまま書けばOK」と覚えておきましょう。ただし、ファイル名の途中に含まれる文字(例:data_backup_new の _backup 部分)は、末尾に一致しないため削除できない点にだけ注意してください。
6. 応用:シェルスクリプトで使う場合
basenameコマンドのSUFFIX指定が最も威力を発揮するのは、シェルスクリプトを作成するときです。シェルスクリプトとは、複数のコマンドをまとめて自動で実行する手順書のようなものです。未経験の方でも、まずは「便利な自動化の魔法」だと思って見てみてください。
例えば、大量の動画ファイルを別の形式に変換したり、名前を変更したりする際、元のファイル名から拡張子(.mp4など)を一旦取り除き、新しい名前を組み立てる作業が頻繁に発生します。このような時に、コマンドの実行結果を変数(文字を一時的に保存する箱)に代入して活用します。
変数名=$(basename パス 拡張子)※ $() で囲むことで、コマンドの実行結果を文字として変数に格納できます。
以下のサンプルでは、動画ファイルのパスからファイル名だけを抜き出し、それを画面に表示する簡単なスクリプトの動きを再現しています。
FILE_PATH="/home/user/movies/travel_vlog.mp4"
FILE_NAME=$(basename $FILE_PATH .mp4)
echo $FILE_NAME
travel_vlog
この例では、まず FILE_PATH という箱にファイルの住所を入れ、次に basename を使って .mp4 を取り除いた結果(travel_vlog)を FILE_NAME という箱に移し替えています。最後に echo コマンドでその中身を表示させています。
このように拡張子のない「純粋な名前」を変数として持っておけば、後から
${FILE_NAME}_converted.mkv のように、名前を自由に加工して新しいファイルを作る作業が驚くほど簡単になります。手作業で一つずつ名前を変える手間がなくなるため、業務効率が劇的に向上します。
7. 他の類似コマンドとの違い
basenameはファイル名を抽出するためのコマンドですが、似た用途を持つLinuxコマンドにdirnameがあります。
basename:ファイル名だけを取り出すdirname:ファイルのパス(ディレクトリ)だけを取り出す
例を見てみましょう:
dirname /home/user/image.png
/home/user
basename /home/user/image.png .png
image
このように、使い分けることで柔軟なファイルパスの処理が可能になります。
8. ファイル名がピリオドを含む場合の注意点
例えばmy.backup.tar.gzのように、ファイル名にピリオドが複数含まれている場合、正確に除外したいSUFFIXを指定しないと意図しない結果になることがあります。
次の例を見てください:
basename my.backup.tar.gz .gz
my.backup.tar
このように、.gzだけが除外されます。もし.tar.gz全体を削除したいなら、明示的に指定しましょう。
basename my.backup.tar.gz .tar.gz
my.backup
まとめ
basenameコマンドとSUFFIX指定の重要ポイント
basenameコマンドは、Linuxにおけるファイルパス操作の基本であり、フルパスからファイル名だけを取り出すための非常に重要なコマンドです。特に初心者にとっては、ディレクトリ構造とファイル名の関係を理解するうえで欠かせない知識となります。 今回解説したSUFFIX指定を活用することで、単にファイル名を取得するだけでなく、拡張子を除いた純粋な名前のみを抽出することが可能になります。これにより、シェルスクリプトやバッチ処理、ログ管理、ファイル変換処理など、多くの実務シーンで効率的な処理を実現できます。
Linuxコマンド操作における実践的な活用方法
Linuxコマンドにおいて、basenameは単体で使用するだけでなく、他のコマンドと組み合わせて利用されることが多いです。例えば、ループ処理やファイル一覧取得と組み合わせることで、大量のファイルに対して一括処理を行うことが可能になります。 また、SUFFIX指定を正しく理解することで、拡張子だけでなく任意の文字列を削除できる点も非常に重要です。これにより、バックアップファイルの識別子削除や一時ファイルの整理など、実務レベルの作業にも応用できます。
サンプルプログラムで理解を深める
実際にLinux環境でbasenameコマンドを活用する例を確認することで、理解がより深まります。以下のサンプルでは、複数のファイルから拡張子を除去して処理する流れを確認できます。
for file in /home/user/files/*.txt
do
name=$(basename "$file" .txt)
echo $name
done
file1
file2
file3
このように、basenameとシェルスクリプトを組み合わせることで、ファイル名の加工処理を簡潔に実装できます。Linuxコマンドを使った自動化処理の第一歩として、非常に重要なテクニックです。
初心者がつまずきやすいポイント
basenameのSUFFIX指定は非常に便利ですが、いくつか注意点もあります。特に、指定した文字列が末尾と完全一致しない場合は削除されないため、正確な記述が必要です。また、複数の拡張子を持つファイルの場合は、どこまで削除するかを明確に指定する必要があります。 これらのポイントを押さえることで、意図しない結果を防ぎ、安定したコマンド操作が可能になります。
今回解説したbasenameコマンドとSUFFIX指定の理解は、Linuxコマンド操作の基礎力を大きく向上させます。ファイル操作、シェルスクリプト、自動化処理、ログ管理など、あらゆる場面で活用できるため、ぜひ繰り返し実行して体に覚えさせてください。
生徒
basenameコマンドって最初はシンプルだと思っていましたが、SUFFIX指定を使うとすごく便利なんですね。拡張子を外したりできるのが印象的でした。
先生
そうですね。Linuxコマンドは一見シンプルでも、オプションや引数の使い方で応用範囲が大きく広がります。basenameはその代表的な例です。
生徒
特にシェルスクリプトで使うと便利そうだと感じました。ファイル名を加工して処理できるのは実務でも役立ちそうです。
先生
その通りです。ファイル処理やログ管理、データ変換など、basenameはさまざまな場面で活躍します。dirnameと組み合わせることで、さらに柔軟な処理も可能になります。
生徒
SUFFIXは拡張子だけじゃなくて任意の文字列も削除できるのが意外でした。バックアップファイルの処理にも使えそうですね。
先生
いいところに気づきましたね。Linuxではこうした細かいテクニックが作業効率を大きく変えます。basenameの理解は、シェルスクリプトの基礎力にもつながります。
生徒
これからはファイル名を扱うときにbasenameを意識して使ってみます。コマンドの組み合わせも勉強してみたいです。
先生
とても良い姿勢です。Linuxコマンドは使えば使うほど理解が深まります。今回の内容をベースに、ぜひ実際の環境で試してみてください。