Path.wildcard / 2不区分大小写的匹配

时间:2016-11-12 22:15:24

标签: path elixir

我想在目录下找到某些类型的文件。扩展部分可以具有任意字符大小写组合。

Path.wildcard("/...some path.../**/*.MPG")

上面的示例只返回具有大写.MPG扩展名的文件,而我还希望获得小写的.mpg文件以及可能发生的任何案例组合。

如果没有列出glob中所有可能的案例组合,有没有办法做到这一点?我喜欢这个在Windows,Linux和OS X上工作。

1 个答案:

答案 0 :(得分:1)

您可以使用方括号以O(n)字符表示,而不是列出所有组合,即O(n!)。在这种情况下,你可以这样做:

Path.wildcard("/...some path.../**/*.[mM][pP][gG]")

您还可以创建一个自动执行此操作的功能:

defmodule Main do
  def ci(<<char::utf8, rest::binary>>) do
    char = <<char::utf8>>
    "[#{String.downcase(char)}#{String.upcase(char)}]" <> ci(rest)
  end
  def ci(""), do: ""

  def main do
    IO.inspect "*.#{ci("mpg")}"
    Path.wildcard "*.#{ci("mpg")}"
  end
end

Main.main
$ ls | grep -i mpg
bar.mpG
baz.mpg
foo.MPG
$ elixir a.exs
"*.[mM][pP][gG]"
["bar.mpG", "baz.mpg", "foo.MPG"]