2017-01-12 3 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

Попробуйте это:

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

Выражение вы пытались пройти через -E вариант интерпретируется как любые символы (.*), точка (\.), и строки {jpg,png}. Думаю, вы путаете Bash brace expansion с alternation (|) в регулярном выражении group (скобки).

Рассмотрите возможность использования концевого якоря: '.*\.(jpg|png)$'.

Без Grep

Как @ 0andriy указал, вы можете передать шаблоны для git ls-files следующим образом:

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

Обратите внимание, вы должны бежать аргументы для того, чтобы предотвратить filename expansion (подстановка). В частности, asterisk (*) character

соответствует любому количеству повторений символьной строки или предшествующего ей RE, включая нулевые экземпляры.

Но это, очевидно, будет работать только для простых git patterns. Для немного более сложного случая, такого как «сопоставление расширения N символов из заданного набора» вам потребуется регулярное выражение (и grep, например).

+0

Спасибо, это работает! Поэтому мне нужно только заменить фигурные скобки скобками и запятыми на трубы, но это не проблема. Действительно, это то, что я сделал (путающий материал). В моей функции, которая вызывает материал, конец привязки линии уже реализован. Но для простоты этого вопроса я просто удалил все, что напрямую не связано с моей проблемой. – mstruebing

+0

@mstruebing, лучше использовать якорь в любом случае, потому что 'file.jpg.tiff' будет соответствовать' '. * \. (Jpg | png)' ', а' '. * \. (Jpg | png) $ ''не будет –

+0

Как я уже сказал, уже реализовано. – mstruebing

Смежные вопросы