シェルスクリプトでファイルの拡張子を取得する方法

目次

スポンサードリンク

この記事ではシェルスクリプトでファイルの拡張子を取得し、処理内で参照する方法を解説します。

ファイルの拡張子を取得する方法

シェルのパラメーター展開を使用するとファイルの拡張子を取得することができます。以下は記述例です。

ext="${filename##*.}"

上記例では、変数filename に格納されているファイル名から拡張子部分を取り出し、変数extに代入しています。 ##* という部分は、ファイル名の先頭から最後のドット(.)までの部分を削除するシェルパラメーター展開です。

もう一つの方法として、expr コマンドを使用する方法もあります。 下記コマンドは、expr コマンドとパターンマッチングを利用して、変数 $filename に格納されたファイル名の拡張子を取得し変数extに代入しています。どちらも同じ結果を得ることができますが可読性の観点ではシェルのパラメーター展開を利用したほうがよいでしょう。

ext=`expr "$filename" : '.*\.\(.*\)'`

サンプルコード

下記サンプルコードは、/etc/httpd/conf/配下にあるファイルの情報を ls -l コマンドで列挙し、awkでファイル名部分のみを配列 file_namesに代入しています。for文で 配列の内容を一つずつ参照し、各ファイル名の拡張子をシェルのパラメーター展開で取得し、echoで標準出力に出力しています。

#!/bin/sh

file_names=(`ls -l /etc/httpd/conf/ | awk '{print $9}'`)

for filename in ${file_names[@]}
do
        ext="${filename##*.}"
        echo "$filename => $ext"
done

exit 0

実行結果は以下の通りです。 ファイルの名称と拡張子を取得できました。

[root@hostname tmp]# ./test.sh 
extra => 
extra_20180403.tgz => tgz
httpd.conf => conf
magic => 
server.crt => crt
server.csr => csr
server.key => key
server_sha2.crt => crt
server_sha2.csr => csr
server_sha2.key => key


シェルスクリプトの知識は、プログラマにとって長く役立つ知識です。 私はこちらの書籍で一通り知識を抑えました。基本から丁寧に解説されています。

最短3時間で覚えるLinuxシェルスクリプト
こちらは、シェルスクリプトの基本的な書き方、デバッグ方法、if, case, while, forなど基本的な制御構文について書かれています。30日間の無料体験もできる『Kindle Unlimited』でも読むことができます。

Linuxコマンドについて徹底的に学べるUdemy講座
もう絶対に忘れない Linux コマンド【Linux 100本ノック+名前の由来+丁寧な解説で、長期記憶に焼き付けろ!】 icon