2016-11-12 21 views
0

ディレクトリの下に特定の種類のファイルを探したい。拡張部分は、任意の大文字小文字の組み合わせを持つことができます。私もそこに発生する可能性の組み合わせどんなケースと一緒にdowncase .mpgファイルを取得したいのですながらパス。ワイルドカード/大文字と小文字を区別しない2件一致

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

上記の例は、大文字.MPG拡張子を持つファイルを返します。

globに可能なすべての大文字と小文字の組み合わせを列挙しないと、その方法がありますか?

答えて

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、 "some path"が "Some path"または "Some path"または "SOME PATH"の場合の対処方法を教えてください。 https://stackoverflow.com/questions/45597018/how-to-perform-a-case-insensitive-file-search-in-erlang-elixir –