basenameコマンドは、ファイル名から.txtや.c等のサフィックスを取り除いたり、dir1/file.txtというファイルパスからdir1/を取り除き、file.txtという結果を得ることができます。
目次
basenameコマンドとは
basenameコマンドは、.txtや.c等のサフィックス部分の文字列を取り除いたり、ファイル名ではないディレクトリ部分の文字列を取り除く事ができます。
また、ファイル名ではなく、ディレクトリ部分の文字列が欲しい場合は、dirnameコマンドがあります。
basenameコマンドの利用例
ファイル名を取得
(オプションなし)
basenameコマンドは、オプションなしで使用するとディレクトリ部分の文字列を取り退きます。しかし、サフィックスはそのまま表示されます。
コマンド例
1 |
basename /home/ubuntu/test_basename/file.txt |
実行結果
1 |
file.txt |
ファイル名からサフィックスを取り除く
ファイル名からサフィックスを取り除く方法は2つあります。
ファイル名の後にサフィックスを記述する方法とオプションでサフィックスを指定する方法です。
ファイル名の後にサフィックスを記述する方法
ファイル名の後にサフィックスを記述することで、そのサフィックスを取り除くことができます。
コマンド例
1 |
basename /home/ubuntu/test_basename/file.txt .txt |
実行結果
1 |
file |
オプションでサフィックスを指定する方法
(-sオプション)
-sオプションでサフィックスを指定することで、そのサフィックスを取り除くことができます。
コマンド例
1 |
basename -s .txt /home/ubuntu/test_basename/file.txt |
実行結果
1 |
file |
ファイル名を複数指定
(-aオプション)
-aオプションは、ファイル名を複数指定することができます。-aオプションを利用する場合にサフィックスを取り除く場合は-sオプションを利用します。
コマンド例
1 |
basename -s .txt -a $file $file2 |
$fileの内容
1 |
/home/ubuntu/test_basename/file.txt |
$file2の内容
1 |
/home/ubuntu/test_basename/file2.txt |
実行結果
1 2 |
file file2 |
カレントディレクトリにfile.txtやfile2.txtがある場合、フルパスでの変数代入は簡易的に以下のようなコマンドでできます。
コマンド例
または
コマンド例
1 |
file=$(readlink -f file.txt) |
または
1 |
file=$(realpath file.txt) |
参考
外部リンクGnu Coreutils
外部リンクGnu Coreutils日本語版