特定ディレクトリ配下で特定の拡張子を持つファイルを探すのは 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
で、重複した拡張子を削除するってかんじです。