Найти файлы, которые не находятся в .gitignore

У меня есть команда, отображающая файлы в моем проекте:

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 может иметь шаблоны glob (также он не будет работать с путями, если файл находится в .gitignore). Как фильтровать файлы на основе шаблонов, которые могут иметь globs?

4 Solutions collect form web for “Найти файлы, которые не находятся в .gitignore”

git обеспечивает git-check-ignore чтобы проверить, исключен ли файл .gitignore .

Таким образом, вы можете использовать:

 find . -type f -not -path './node_modules*' \ -a -not -path '*.git*' \ -a -not -path './coverage*' \ -a -not -path './bower_components*' \ -a -not -name '*~' \ -exec sh -c ' for f do git check-ignore -q "$f" || printf '%s\n' "$f" done ' find-sh {} + 

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

Чтобы показать файлы, находящиеся в вашем контроле, и которые отслеживаются Git, используйте

 $ git ls-files 

Эта команда имеет несколько параметров для показа, например, кешированные файлы, необработанные файлы, измененные файлы, проигнорированные файлы и т. Д. См. git ls-files --help .

есть команда git для выполнения именно этого: например

 my_git_repo % git grep --line-number TODO desktop/includes/controllers/user_applications.sh:126: # TODO try running this without sudo desktop/includes/controllers/web_tools.sh:52: TODO: detail the actual steps here: desktop/includes/controllers/web_tools.sh:57: TODO: check if, at this point, the menurc file exists. ie it was created 

Как вы заявили, он будет делать основной grep будет большинство стандартных параметров grep, но он не будет искать .git или любые файлы или папки в вашем файле .gitignore .
Для получения дополнительной информации см. man git-grep

подмодули:

Если у вас есть другие репозитории git внутри этого git-репо (они должны быть в подмодулях), вы можете использовать флага --recurse-submodules для поиска в подмодулях, а также

Вы можете использовать массив, в котором будет выполняться шайба bash.

Имея такие файлы:

 touch file1 file2 file3 some more file here 

И имея файл ignore подобный этому

 cat <<EOF >ignore file* here EOF 

С помощью

 arr=($(cat ignore));declare -p arr 

Это приведет к следующему:

 declare -a arr='([0]="file" [1]="file1" [2]="file2" [3]="file3" [4]="here")' 

Затем вы можете использовать любую технику для управления этими данными.

Я лично предпочитаю что-то вроде этого:

 awk 'NR==FNR{a[$1];next}(!($1 in a))' <(printf '%s\n' "${arr[@]}") <(find . -type f -printf %f\\n) #Output some more ignore 
  • Есть ли другой способ использовать tail -f для работы grep -q &&?
  • Как я могу извлечь текст между двумя строками в файле журнала?
  • Каков наиболее эффективный способ grep для двух совершенно разных вещей и присвоения значений отдельным переменным?
  • Как сделать pgrep первым аргументом командной строки?
  • Сравните два файла и распечатайте общие поля и их соответствующие номера строк в 1-м файле
  • Как распечатать элемент из соответствующего ближайшего следующего столбца после поиска элемента в текущем столбце?
  • Как я могу остановить grep, возвращая себя
  • Выход Grep Wvdial во время работы
  • Я хотел бы grep все файлы, кроме некоторых типов файлов?
  • Греп из строки в строку
  • Могу ли я использовать Find и Grep в одной строке
  • Interesting Posts

    Не удается удалить файл: «Структура нуждается в очистке»

    Скорость записи медленного USB 3

    Есть ли ярлык для повторения второй команды proximate в bash?

    Сортировать по столбцам

    Свойство командной строки CLI Linux 2.0

    почему сообщение postfix smtp отключено?

    Перемещение файлов из подпапок в родительскую папку в более крупном каталоге

    Caja – слишком быстрое обновление

    Как включить команду «daw» vi в zsh?

    Тестирование приоритета разрешения адресов из командной строки

    Действительно ли sed \ {x, y \} диапазон жадный?

    Почему мой Linux-хост suddently перестанет получать многоадресную рассылку? Все остальные пользователи в частной сети получают

    Получать поп-идентификатор или IP-адрес, когда клиент регистрируется на сервере Dovecot

    Можно ли создать непустой файл без write_close и переименовать событие?

    cd во все каталоги, выполнить команду над файлами в этом каталоге и вернуться в предыдущий текущий каталог

    Linux и Unix - лучшая ОС в мире.