それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

bashのシェルスクリプトで拡張子を取得して利用するときのまとめ

特定の拡張子に○○する的なことはよくある

シェルスクリプトを書いていると拡張子で判別したいことはよくある。

bashで拡張子を取得するには

bashのブレース展開が一番ラクです。

path=/etc/apache2/httpd.conf
extension=${path##*.}  #=> conf

特定のディレクトリの中で拡張子を取得するには

xargs と組み合わせる

find  | xargs -I@  bash -c 'path=@; echo ${path##*.}'

そもそも拡張子の取得が必要ですか?

そのシェルスクリプトで拡張子をもとに検索をしたいなら、拡張子を取る必要はないかもしれないですよ。

指定した拡張子を検索

grep  . -R --include=*.php

指定した拡張子のファイルを列挙する。

find -type f -name '*.php'

ファイル名がマッチするかどうかなら、拡張子を取らなくても正規表現やglob のマッチングで倒せる

正規表現でマッチング.

[[ $path =~ conf$ ]]; 

glob マッチングで conf にマッチさせる。

[[ $path = *conf ]]; 

拡張子がとれたら?

uniq -c や sort で並べ替えると便利でしょうね。

他には?

awksed と組み合わせるのもいいですね。

シェル・スクリプトを使うと組合せは無限大なのがいいですよね。

関連資料