2017-01-12 13 views
1

たとえば、*.{jpg,png}のような文字列がありますが、文字列は*.scssでもかまいません。実際にはeditorconfigです。gitリポジトリ内のファイルを拡張子で検索する

次に、私のgitリポジトリによって追跡されるこの拡張子のすべてのファイルを検索したいと思います。

いくつかの方法を試しましたが、十分な解決策が見つかりませんでした。

私が持っている最も近いものは次のとおりです。 git ls-tree -r master --name-only | grep -E ".*\.jpg"

しかし、これは、このgit ls-tree -r master --name-only | grep -E ".*\.{jpg,png}"ような何かのための単一のファイル拡張子ではないために働いています。

誰でも手伝ってもらえますか?

答えて

4

はこれを試してください:あなたは-Eオプションを使用して渡そうとしました式は任意の文字(.*)、ドット(\.)、および文字列​​として解釈され

git ls-tree -r master --name-only | grep -E '.*\.(jpg|png)' 

。私はBash brace expansionalternation|)を正規表現group(かっこ)で混同していると思います。

行末アンカーの使用を検討してください:'.*\.(jpg|png)$'

git ls-files '*.jpg' '*.png' 

注意、あなたがfilename expansion(グロブ)を防止するために、引数をエスケープする必要があります。として

グレップなし

は0andriy @次のようにあなたがgit ls-filesにパターンを渡すことができます指摘しました。特に、asterisk (*) character

は、ゼロインスタンスを含むそれより前の文字列またはREの任意の数の繰り返しに一致します。

しかし、これは明らかに単純なgit patternsでのみ機能します。 「拡張セットマッチングNの文字セット」のような複雑な場合は、正規表現が必要です(たとえば、、grepなど)。

+0

ありがとうございます、これは動作しています!ですから、中括弧は括弧で、カンマはパイプで置き換えるだけですが、それは問題ありません。 それは確かに私がやったことです(混乱するもの)。 stuffを呼び出している私の関数では、行末アンカーはすでに実装されています。しかし、この質問を簡単にするために、私は問題に直接関係していないものをすべて削除しました。 – mstruebing

+0

@mstruebingのように、 'file.jpg.tiff'は'。*(jpg | png) ''と' '。* \。(jpg | png)$と一致するので、 ''いいえ –

+0

私が言ったように、すでに実装されています。 – mstruebing

関連する問題