У меня есть команда find, которая отображает файлы в моем проекте:
find . -type f -not -path './node_modules*' -a -not -path '*.git*' \
-a -not -path './coverage*' -a -not -path './bower_components*' \
-a -not -name '*~'
Как я могу отфильтровать файлы, чтобы они не отображали те, которые находятся в .gitignore?
Я думал, что я использую:
while read file; do
grep $file .gitignore > /dev/null && echo $file;
done
но файл .gitignore может иметь шаблоны глобуса (также он не будет работать с путями, если файл находится в .gitignore). Как я могу фильтровать файлы по шаблонам, которые могут иметь глобусы?
find-sh {} +
в конце?find-sh
?find /tmp -exec sh -c ': "${non_existed_var:?foo}"' find-sh {} +
напримердля этого есть команда git: например
Как вы заявили, он будет выполнять базовые действия grep с большинством обычных опций grep, но он не будет искать
.git
ни один из файлов или папок в вашем.gitignore
файле.Для получения дополнительной информации см.
man git-grep
подмодули:
Если у вас есть другие репозитории git внутри этого репозитория git (они должны быть в подмодулях), то вы также можете использовать флаг
--recurse-submodules
для поиска в подмодулях.источник
Чтобы показать файлы, которые находятся в вашей проверке и которые отслеживаются Git, используйте
Эта команда имеет ряд параметров для отображения, например, кэшированные файлы, неотслеживаемые файлы, измененные файлы, игнорируемые файлы и т
git ls-files --help
. Д. См .источник
git ls-files
но не думаю, что у него есть возможность показать неотслеживаемые файлы, какой?-o
(другой). Например,git ls-files -o -X .gitignore
.gitignore
.git ls-files
выводят ./foo.txt, а выводилиfind
бы ./Foo.txtВы можете использовать массив, в котором будет выполняться bash glob.
Имея такие файлы:
И имея такой
ignore
файлС помощью
Приведет к этому:
Затем вы можете использовать любую технику для манипулирования этими данными.
Я лично предпочитаю что-то вроде этого:
источник
gitignore
это суперсетbash
глобуса, вы пропустите что-то вроде!file*
!file*
? Как шаблон глобуса в файле игнорирования или как имя файла?gitignore
принять файл шаблона, как!file*
исключить файлы, начинающиеся сfile
, а также двойную звезду**
.gitignore
имеет множество функций, которые не всегда так просто реализовать в Bash: git-scm.com/docs/gitignore . Хотя игнорирование, состоящее только из простых шаров, должно быть выполнимо в простом Bash, без awk или чего-то подобного!
как нет? Может быть, расширенная глобализация может справиться с этой ситуацией. О Doublestar, Bash может справиться с этимshopt -s globstar
.