我想在目录下找到某些类型的文件。扩展部分可以具有任意字符大小写组合。
Path.wildcard("/...some path.../**/*.MPG")
上面的示例只返回具有大写.MPG
扩展名的文件,而我还希望获得小写的.mpg
文件以及可能发生的任何案例组合。
如果没有列出glob
中所有可能的案例组合,有没有办法做到这一点?我喜欢这个在Windows,Linux和OS X上工作。
答案 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"]