カテゴリ: Linuxコマンド集 更新日: 2026/03/09

basenameのSUFFIX指定で拡張子を除いてファイル名を取得する方法を解説!初心者向けLinuxコマンド講座

basename SUFFIX指定|拡張子を除外してファイル名を取得する方法
basename SUFFIX指定|拡張子を除外してファイル名を取得する方法

先生と生徒の会話形式で理解しよう

生徒

「Linuxでファイルの名前だけを取り出したいんですけど、拡張子はいらないんです。どうすればいいですか?」

先生

「その場合は、basenameコマンドのSUFFIX指定を使うと便利ですよ。」

生徒

「SUFFIXってなんですか?難しそう…」

先生

「心配しないで。とてもシンプルだから、わかりやすく説明しますね!」

1. basenameコマンドとは?

1. basenameコマンドとは?
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の基本的な使い方

2. basenameの基本的な使い方
2. basenameの基本的な使い方

まずは、オプションや追加の指定を何も行わない、最も標準的なbasenameコマンドの動作を確認してみましょう。このコマンドの役割は、ディレクトリの階層構造(パス)を切り離して、純粋な「ファイル名」だけを表示させることです。

例えば、あなたがパソコンの中で「画像フォルダ」の中にある「image.jpg」というファイルを見ていると想像してください。システム上のフルパスで指定しても、basenameを使えばファイル名だけを取り出すことができます。


basename /home/user/photos/image.jpg
image.jpg

上記の実行結果を見ると、ファイルが保存されている場所(/home/user/photos/)がすべて取り除かれ、末尾にある image.jpg だけが表示されました。これは、ファイルがどこにあるかではなく、そのファイル自体が「何という名前か」を確認したいときに非常に便利です。

ここがポイント!
通常の使い方の場合は、実行結果に .jpg.txt といった拡張子が含まれたままになります。もし、この拡張子さえも消して「名前だけ」にしたい場合に使うのが、次に解説する「SUFFIX(接尾辞)」の指定です。

プログラミングやサーバーの管理では、このようにパスからファイル名だけを抽出する操作が頻繁に行われます。まずはこの「一番後ろの名前だけを拾ってくる」という感覚を掴んでおきましょう。

3. SUFFIXを指定して拡張子を除外する方法

3. SUFFIXを指定して拡張子を除外する方法
3. SUFFIXを指定して拡張子を除外する方法

basenameコマンドでは、第2引数に除外したい文字列(SUFFIX)を指定できます。これにより、ファイル名から拡張子を取り除いた形で取得できます。

次のように使います:


basename /home/user/photos/image.jpg .jpg
image

このように.jpgが除かれて、ファイル名だけが表示されました。これがSUFFIX指定の威力です!

4. 複数の拡張子がある場合は?

4. 複数の拡張子がある場合は?
4. 複数の拡張子がある場合は?

たとえば、次のようなファイルがあるとします:


basename /home/user/data/archive.tar.gz .gz
archive.tar

ここでは.gzだけが除かれました。もし.tar.gzの両方を取り除きたい場合は、完全な拡張子をSUFFIXに指定しましょう。


basename /home/user/data/archive.tar.gz .tar.gz
archive

このようにすると、すべて除外されてシンプルな名前だけが取り出せます。

5. 拡張子以外の文字列も除外できる?

5. 拡張子以外の文字列も除外できる?
5. 拡張子以外の文字列も除外できる?

実は、basenameのSUFFIX指定は拡張子に限りません。ファイル名の末尾に一致する文字列であれば、どんなものでも除外できます。


basename /home/user/report_final_draft report_final_
draft

このように、report_final_という文字列が削除されて、draftだけが残ります。

6. 応用:シェルスクリプトで使う場合

6. 応用:シェルスクリプトで使う場合
6. 応用:シェルスクリプトで使う場合

SUFFIXを指定したbasenameは、シェルスクリプトでのログ出力や処理対象の名前取得などにも便利です。

以下はファイル名から拡張子を取り除いて変数に代入する例です:


FILENAME=$(basename /path/to/movie.mp4 .mp4)
echo $FILENAME
movie

このようにすれば、拡張子のないシンプルな名前を変数に格納して使うことができます。

7. 他の類似コマンドとの違い

7. 他の類似コマンドとの違い
7. 他の類似コマンドとの違い

basenameはファイル名を抽出するためのコマンドですが、似た用途を持つLinuxコマンドにdirnameがあります。

  • basename:ファイル名だけを取り出す
  • dirname:ファイルのパス(ディレクトリ)だけを取り出す

例を見てみましょう:


dirname /home/user/image.png
/home/user

basename /home/user/image.png .png
image

このように、使い分けることで柔軟なファイルパスの処理が可能になります。

8. ファイル名がピリオドを含む場合の注意点

8. ファイル名がピリオドを含む場合の注意点
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
カテゴリの一覧へ
新着記事
New1
ファイルとディレクトリ操作
Linuxのファイルシステムとは?ディレクトリ構造を初心者向けにわかりやすく解説
New2
テキスト・データ処理
sortコマンドの使い方を完全ガイド!初心者でもわかるLinuxでテキストやデータを並べ替える基本
New3
ファイル・ディレクトリ操作
touch -mオプション|修正時刻だけを変更する方法を初心者向けに解説
New4
ファイル・ディレクトリ操作
touch -aオプション|アクセス時刻だけを変更する方法をやさしく解説
人気記事
No.1
Java&Spring記事人気No1
テキスト・データ処理
catコマンドとは?Linuxでファイル内容を表示・連結する基本
No.2
Java&Spring記事人気No2
テキスト・データ処理
grepコマンドとは?Linuxで文字列を検索する基本をやさしく解説!
No.3
Java&Spring記事人気No3
ファイル・ディレクトリ操作
findコマンドの使い方を完全ガイド!初心者でもわかるLinuxのファイル検索の基本
No.4
Java&Spring記事人気No4
テキスト・データ処理
awk -fオプションの使い方を完全ガイド!初心者でもわかるLinuxテキスト処理の基本