Elixirでファイル一覧を取得しよう
複雑に階層化したフォルダの中にあるファイルの一覧を取得するには再帰的な処理が必要となります。
この記事では、それをElixirのシンプルなコードで実現する方法をご紹介します。
コード
defmodule GetFileList do
def file_get(path) do
path |> ls_r()
end
# 指定したパス内に含まれるファイルの一覧を再起的に作成する
defp ls_r(path) do
cond do
File.regular?(path) -> [path]
File.dir?(path) ->
File.ls!(path)
|> Enum.map(&Path.join(path, &1))
|> Enum.map(&ls_r/1)
|> Enum.concat
end
end
end
実行結果
iexで”output”フォルダを対象として実行してみました。
“output”フォルダの中身がリスト形式で帰ってきました。深い階層のファイルも問題なく取得できていますね。
余談ですがこの処理は当ブログのCDプロセスにも組み込まれています。
具体的にいうと静的出力ファイルを転送する際に、 転送対象ファイルをリストアップする処理として活用しています。
他にも様々な場面で役立つ汎用的な処理かと思いますので 必要に応じて活用してみてください。