2016-11-12 37 views
0

我想查找某个目录下某些类型的文件。扩展部分可以有任意的字符大小写组合。Path.wildcard/2不区分大小写的匹配

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

上面的例子只会返回其大写.MPG扩展名的文件,同时我也想拿到downcase .mpg文件与有可能发生的任何情况的组合一起。

有没有办法在glob没有列出所有可能的病例组合?我希望这可以在Windows,Linux和OS X上工作。

回答

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"] 
+0

我试过方括号的办法之前,由于某种原因它不适合我。现在确实如此,也许我在某个地方犯了一个错误。谢谢! –

+0

@Dogbert,我们如何处理“某些路径”是“某些路径”或“某个路径”或“某个路径”的情况? https://stackoverflow.com/questions/45597018/how-to-perform-a-case-insensitive-file-search-in-erlang-elixir –

相关问题