Linuxコマンドbasenameの使い方と3つのオプション

Linuxコマンドbasenameは、ファイルパスやディレクトリパスからファイル名のみを抽出する際に便利に使えるコマンドです。このコマンドは、パスから最後の要素を削除し、純粋なファイル名のみを返します。シンプルに見えますが、basenameを適切に活用することで、スクリプトの作成やファイル管理において非常に効率的に使用できます。

Linuxコマンドbasenameとは?

basenameは、パスの最後の要素を取得するLinuxコマンドです。例えば、/home/user/example.txtというパスがある場合、basenameコマンドを使用するとexample.txtというファイル名だけが返されます。主にファイルパスが長い場合や、パスにファイル名が含まれている場合に、それを簡単に抽出する際に使用されます。

図1. Linuxコマンドbasenameの基本使用結果
図1. Linuxコマンドbasenameの基本使用結果

上記のように、パスを引数として提供すると、そのパスの最後のファイル名を抽出する機能を果たします。わざわざスクリプトでパス名を解析してファイル名を取得する必要がなく、basenameコマンドを使うだけで簡単にファイル名を取得できます。

basenameの基本的な使い方

Linuxコマンドbasenameの基本的な使い方は非常に簡単で、次の通りです。basenameコマンドの後にファイルパスを指定すると、そのファイル名を抽出して返します。

basename /usr/bin/filename
ShellScript

ここでは、/usr/bin/filenameからfilenameのみを抽出します。このようにファイル名だけが必要なときに簡単に使用できます。

便利なオプション

basenameには、いくつか便利なオプションが用意されています。これらのオプションをうまく活用することで、さらに多くの場面で役立てることができます。

-a, –multipleオプション

このオプションは、複数のファイルパスを一度に処理できるようにします。複数のファイルやパスを処理する際に、個別にコマンドを実行せず、一度に処理できるので便利です。

basename -a /path/to/file1 /path/to/file2
ShellScript

以下は、basenameコマンドと-aオプションを使用して、/usr/bin以下のlsとmvを抽出する結果です。

図2. Linuxコマンドbasename -aオプションを使用して複数のファイル名を同時に取得
図2. Linuxコマンドbasename -aオプションを使用して複数のファイル名を同時に取得

-s, –suffixオプション

ファイル名を抽出する際に、ファイルの拡張子も一緒に抽出される場合、拡張子を除いた純粋なファイル名だけを取得したいときがあります。このオプションは、ファイル名から指定したサフィックス(拡張子)を削除するために使用されます。

basename -s .txt /usr/local/bin/file.txt
ShellScript

以下の結果のように、.txt拡張子が削除され、exampleだけが返されることを確認できます。

図3. Linuxコマンドbasename -sオプションによる拡張子削除結果
図3. Linuxコマンドbasename -sオプションによる拡張子削除結果

他の方法で拡張子を削除

-sオプションを使わずに拡張子を削除する方法もあります。パスと一緒に拡張子を最後の引数として渡すことで、拡張子部分を削除できます。

basename /home/ito/example.txt .txt
ShellScript

上記コマンドは、.txt拡張子を削除し、exampleだけを返す例です。このように拡張子も一緒に指定すると、不要な部分を簡単に削除できるため便利です。拡張子を削除するスクリプトを別途作成せずに、手軽にファイル名のみを取得できます。

図4. Linuxコマンドbasenameの2番目の引数で拡張子削除結果
図4. Linuxコマンドbasenameの2番目の引数で拡張子削除結果

-z, –zeroオプション

basenameの-zオプションは、結果の最後に改行文字の代わりにNULL文字を追加する役割を果たします。通常、basenameはファイル名を抽出した後、出力時に改行文字(\n)を追加して次の出力と区別します。しかし、-zオプションを使用すると、NULL文字(\0)を追加することで、複数のファイル名を処理する際にスペースや改行による混乱を防ぐことができます。

このオプションは、特にファイル名にスペースが含まれている場合、スクリプトで複数のファイル名を処理する際に便利です。NULL文字はファイル名の終わりを正確に区別するため、各ファイル名を明確に分けることができます。

図5. Linuxコマンドbasename -zオプションを使用して改行文字の代わりにNULL文字を使用
図5. Linuxコマンドbasename -zオプションを使用して改行文字の代わりにNULL文字を使用

上記のように、example.txtの後に改行文字がなく、NULL文字(\0)が追加されていることがわかります。

basename使用時の注意点

basenameはシンプルなコマンドですが、ファイルパスの処理にはいくつか注意点があります。

  • パスの形式に注意: パスが誤って指定されたり、ファイル名ではなくディレクトリパスが含まれている場合、期待した結果が返されないことがあります。パスには必ずファイル名まで含めた正確なパスを入力する必要があります。
  • 拡張子指定に注意: 拡張子を削除するには、そのファイルの拡張子を正確に指定する必要があります。例えば、.txtを削除したい場合、拡張子が.textであれば、ファイル名を正しく抽出できないことがあります。

まとめ

basenameは、Linuxでパスやファイル処理を行う際に非常に便利なコマンドです。ファイルパスからファイル名だけが必要なときに使い、拡張子を削除したり、複数のパスを一度に処理することも可能で、効率的な作業が行えます。特に、スクリプト作成や自動化作業でファイル名のみを抽出する場合には欠かせないコマンドです。さまざまなオプションを活用し、自分の状況に合わせた最適な使い方を見つけてみましょう。

リファレンス

関連ポスト

コメントする