理系学生日記

おまえはいつまで学生気分なのか

特定ディレクトリ配下の拡張子の一覧を取得するワンライナー

特定ディレクトリ配下で特定の拡張子を持つファイルを探すのは find コマンドで一発ですが、一方で、特定ディレクトリ配下の拡張子をすべて抽出する、というユースケースがあります。 ぼくは、.gitattributes に書く拡張子って何にしよう、ってときに、その必要が生じました。

結論から言うと、以下で可能です。

$ find . -type d -name '.git' -prune -o -type f -exec basename {} \; | grep -o '\.[^.]*$' | sort | uniq
.MF
.aaa
.class
.classpath
.component
.config
.container
(略)

find コマンドについては、.git ディレクトリ配下のファイルは無視するという前提でファイルパスを抽出し、basename コマンドにかけてファイル名を抽出しています。

-prune のオプションについては、こちらが分かりやすいかと。

ファイル名を取得できた後、grep-o オプションを使います。

grep は、別に合致した行を抽出できるだけでなくて、「合致した箇所」を -o オプションで抽出することができます。ここでは、 「最後の . の後に続く、. を含まない文字列」を拡張子として定義しました。

あとは、おなじみの sort | uniq で、重複した拡張子を削除するってかんじです。