【问题标题】:How to return a collection of files from a given directory in Elixir?如何从 Elixir 中的给定目录返回文件集合?
【发布时间】:2016-11-21 11:29:45
【问题描述】:

在 Ruby 中,我可以使用

target_files = Dir["/some/dir/path/*.rb"]
#=> ["/some/dir/path/foo.rb", "/some/dir/path/bar.rb", "/some/dir/path/baz.rb"]

这将返回一个目录中所有匹配文件的数组。如何在 Elixir 中做类似的事情?

【问题讨论】:

标签: file collections directory elixir


【解决方案1】:

你正在寻找Path.wildcard/2:

iex(1)> Path.wildcard("/tmp/some/dir/path/*.rb")
["/tmp/some/dir/path/bar.rb", "/tmp/some/dir/path/baz.rb",
 "/tmp/some/dir/path/foo.rb"]
iex(2)> Path.wildcard("/tmp/**/*b*.rb")
["/tmp/some/dir/path/bar.rb", "/tmp/some/dir/path/baz.rb"]

【讨论】:

  • Path.wildcard("/tmp/some/dir/path/*.rb") |> Enum.map(&Path.basename/1) 将输出["bar.rb", "baz.rb", "foo.rb"],以防您只需要文件名。
  • @Dogbert - 上面的链接已损坏。现在就在这里 - hexdocs.pm/elixir/Path.html#wildcard/2
【解决方案2】:

如果您想使用正则表达式递归收集文件,可以使用 :filelib.fold_files/5

【讨论】:

    【解决方案3】:

    Path.wildcard/1 可以处理带有两个星“**”的递归文件夹(它的工作方式类似于 Ruby 中的Dir.glob)。例如

    Path.wildcard("../data/??/**/*.yml")

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-25
      • 2015-03-25
      • 1970-01-01
      • 2017-09-08
      • 1970-01-01
      • 2010-12-24
      • 2017-02-06
      • 2019-02-08
      相关资源
      最近更新 更多