任意のディレクトリ以下すべてのファイルの拡張子一覧の取得

## 結論

とりあえず下記で解決。

~~~zsh
 find ディレクトリ -type f | awk -F/ '{print $NF}' | awk -F. '{print $NF}' | sort | uniq
~~~

ただし、拡張子のないファイルの場合はファイル名が表示される。
また、隠しファイルで且つ拡張子がないファイルの場合は先頭の`.`が削除されて表示されることに注意。

現在のディレクトリ以下の場合は、

~~~zsh
find ./ -type f -maxdepth 1 | awk -F/ '{print $NF}' | awk -F. '{print $NF}' | sort | uniq
~~~

> [findコマンドで検索する階層を指定(maxdepth)
](https://blog.be-dama.com/2015/01/20/find%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E6%A4%9C%E7%B4%A2%E3%81%99%E3%82%8B%E9%9A%8E%E5%B1%A4%E3%82%92%E6%8C%87%E5%AE%9Amaxdepth/)


## 検証

railsのディレクトリ構成でやってみる。例えば`app`。

まず、`find ディレクトリ -type f`で、ディレクトリ以下のファイルを再帰的にパスも含めて表示。

> [findでファイル名のみ表示](https://qiita.com/skkzsh/items/40b661a043c9b60f8426)

~~~zsh
$ find app -type f 
app/mailers/application_mailer.rb
app/models/mask.rb
app/models/application_record.rb
app/models/concerns/.keep
app/models/user.rb
app/jobs/application_job.rb
app/controllers/application_controller.rb
app/controllers/users_controller.rb
app/controllers/concerns/.keep
app/views/layouts/application.html.erb
app/views/layouts/mailer.html.erb
app/views/layouts/mailer.text.erb
app/views/users/index.html.erb
app/views/users/index.json.jbuilder
app/views/users/show.json.jbuilder
app/views/users/edit.html.erb
app/views/users/show.html.erb
app/views/users/_user.json.jbuilder
app/views/users/_form.html.erb
app/views/users/new.html.erb
app/assets/config/manifest.js
app/assets/images/.keep
app/assets/javascripts/cable.js
app/assets/javascripts/users.coffee
app/assets/javascripts/application.js
app/assets/javascripts/channels/.keep
app/assets/stylesheets/scaffolds.scss
app/assets/stylesheets/application.css
app/assets/stylesheets/users.scss
app/helpers/users_helper.rb
app/helpers/application_helper.rb
app/channels/application_cable/connection.rb
app/channels/application_cable/channel.rb
~~~

`awk -F/ '{print $NF}'`で、ファイル名のみ表示。

> [awkの組み込み変数NRとNFについて解説](https://www.setouchino.cloud/blogs/108)

~~~zsh
$ find app -type f | awk -F/ '{print $NF}'
application_mailer.rb
mask.rb
application_record.rb
.keep
user.rb
application_job.rb
application_controller.rb
users_controller.rb
.keep
application.html.erb
mailer.html.erb
mailer.text.erb
index.html.erb
index.json.jbuilder
show.json.jbuilder
edit.html.erb
show.html.erb
_user.json.jbuilder
_form.html.erb
new.html.erb
manifest.js
.keep
cable.js
users.coffee
application.js
.keep
scaffolds.scss
application.css
users.scss
users_helper.rb
application_helper.rb
connection.rb
channel.rb
~~~

`awk -F. '{print $NF}'`で、拡張子のみ(拡張子がない場合はファイル名)を表示

~~~zsh
$ find app -type f | awk -F/ '{print $NF}' | awk -F. '{print $NF}'
rb
rb
rb
keep
rb
rb
rb
rb
keep
erb
erb
erb
erb
jbuilder
jbuilder
erb
erb
jbuilder
erb
erb
js
keep
js
coffee
js
keep
scss
css
scss
rb
rb
rb
rb
~~~

`sort`してから`uniq`

~~~zsh
 $ find app -type f | awk -F/ '{print $NF}' | awk -F. '{print $NF}' | sort | uniq
coffee
css
erb
jbuilder
js
keep
rb
scss
~~~

`sort`しないで`uniq`だと、連続して同じ箇所のみ`uniq`される。

~~~zsh
$ find app -type f | awk -F/ '{print $NF}' | awk -F. '{print $NF}' | uniq       
rb
keep
rb
keep
erb
jbuilder
erb
jbuilder
erb
js
keep
js
coffee
js
keep
scss
css
scss
rb
~~~

### 現在のディレクトリ以下

~~~zsh
total 72
drwxr-xr-x  19 knog  staff   608 12 22 01:11 ./
drwxr-xr-x   8 knog  staff   256  3 11 01:32 ../
drwxr-xr-x  12 knog  staff   384 12 22 01:11 .git/
-rw-r--r--   1 knog  staff  1380 12 22 01:11 .gitignore
-rw-r--r--   1 knog  staff    10 12 22 01:11 .ruby-version
-rw-r--r--   1 knog  staff  2105 12 22 01:11 Gemfile
-rw-r--r--   1 knog  staff  5504 12 22 01:11 Gemfile.lock
-rw-r--r--   1 knog  staff   374 12 22 01:11 README.md
-rw-r--r--   1 knog  staff   227 12 22 01:11 Rakefile
drwxr-xr-x  10 knog  staff   320 12 22 01:11 app/
drwxr-xr-x   8 knog  staff   256 12 22 01:11 bin/
drwxr-xr-x  15 knog  staff   480 12 22 01:11 config/
-rw-r--r--   1 knog  staff   130 12 22 01:11 config.ru
drwxr-xr-x   3 knog  staff    96 12 22 01:11 db/
drwxr-xr-x   4 knog  staff   128 12 22 01:11 lib/
-rw-r--r--   1 knog  staff    64 12 22 01:11 package.json
drwxr-xr-x   9 knog  staff   288 12 22 01:11 public/
drwxr-xr-x   3 knog  staff    96 12 22 01:11 storage/
drwxr-xr-x   3 knog  staff    96 12 22 01:11 vendor/

$ find ./ -type f -maxdepth 1 | awk -F/ '{print $NF}' | awk -F. '{print $NF}' | sort | uniq
Gemfile
Rakefile
gitignore
json
lock
md
ru
ruby-version
~~~

標準のrailsだとファイルがあまりないのでやる意味ないかも。

<br>

参考にさせていただきました。

> [findでファイル名のみ表示](https://qiita.com/skkzsh/items/40b661a043c9b60f8426)
> [awkの組み込み変数NRとNFについて解説](https://www.setouchino.cloud/blogs/108)
> [findコマンドで検索する階層を指定(maxdepth)
](https://blog.be-dama.com/2015/01/20/find%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E6%A4%9C%E7%B4%A2%E3%81%99%E3%82%8B%E9%9A%8E%E5%B1%A4%E3%82%92%E6%8C%87%E5%AE%9Amaxdepth/)