[Linux] ファイルのパス名からディレクトリの部分を削除する

basenameコマンドはファイルのパス名(ディレクトリ+ファイル名)からディレクトリの部分を削除して表示します。

basename – strip directory and suffix from filenames

basenameコマンドはGNU Coreutilsに含まれています。ここでは、basenameコマンドの基本的な使い方を紹介します。
※以降の実行例は、Ubuntu17.10で確認しています。

1. basenameコマンドの基本的な使い方

basename name [suffix]
basename option... name...

与えられたnameからディレクトリ部分を削除します。suffixも与えられた場合、ファイル名からsuffix(拡張子)も削除します。
nameに指定するパス名は、実在しないパスでも問題ありません。

option 説明
-a, --multiple 復数のnameを指定する場合に利用します。
-s, --suffix=SUFFIX SUFFIX(拡張子)を取り除きます。
-z, --zero 出力結果の区切りを改行ではなくNULに変更します。

2. basenameコマンドの実行例

basenameコマンドの実行例を、いくつか紹介します。

$ basename /etc/pam.conf
pam.conf
$ basename /etc/pam.conf .conf
pam
$ basename ../../hoge
hoge

3. basenameコマンドで復数のパス名を処理する

basenameコマンドで復数のパス名を処理したい場合は、’-a‘オプションを利用します。

$ basename -a /hoge/test.txt /etc/sample.txt
test.txt
sample.txt

拡張子も削除したい場合は、’-s‘オプションを利用します。

$ basename -s .txt  /hoge/test.txt /etc/sample.txt
test
sample

4. bashのシェル展開機能を使う

bashのシェル展開機能を利用しても、ディレクトリ部分を削除することができます。

${parameter##word}

この展開の書き方で、parameterからwordにマッチングする最長の部分を削除します。パス名からディレクトリ部分を削除する例は、以下のようになります。

$ i=/hoge/test.txt
$ i=${i##*/}
$ echo $i
test.txt

 
以上、ファイルのパス名からディレクトリの部分を削除する方法の紹介でした。