Elixirで指定フォルダ内のファイル一覧を再起的に取得する方法 | Candelabrum
Candelabrum

Elixirで指定フォルダ内のファイル一覧を再起的に取得する方法

2023.10.14

Elixirでファイル一覧を取得しよう

enter image description here

複雑に階層化したフォルダの中にあるファイルの一覧を取得するには再帰的な処理が必要となります。

この記事では、それを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”フォルダを対象として実行してみました。

enter image description here

“output”フォルダの中身がリスト形式で帰ってきました。深い階層のファイルも問題なく取得できていますね。

余談ですがこの処理は当ブログのCDプロセスにも組み込まれています。

具体的にいうと静的出力ファイルを転送する際に、 転送対象ファイルをリストアップする処理として活用しています。

他にも様々な場面で役立つ汎用的な処理かと思いますので 必要に応じて活用してみてください。