Как повторно использовать шаблон файла в .gitignore в bash/zsh?

Как повторно использовать шаблон файла в .gitignore в bash/zsh?

Вот содержание.gitignore

cron.yaml
build
target
webview
*.pyc
*.sublime-workspace
.idea
*.rej
.coverage
app/tools/temp_*.py
app/tools/*/temp_*.py

В настоящее время я перебираю файлы в локальной папке с помощью этого скрипта:

find . -type f | grep -v -E "(.idea|.git)" | while read file
do
  # Do something with $file
done

Я хочу дополнительно отфильтровать эту $fileпеременную, если она соответствует шаблону в .gitignore. Существуют ли какие-либо существующие утилиты или встроенные функции bash, которые могут понимать эти шаблоны файлов?

решение1

Вы можете использовать опцию grepaka -f( --file) с заменой процесса для "регуляризации" некоторых шаблонов. Например:

find . -type f | grep -Ev '(\.idea|\.git)' | 
    grep -v -f <(sed 's/\([.|]\)/\\\1/g; s/\?/./g ; s/\*/.*/g' .gitignore) | 
    while IFS= read -r file ; do 
      # Do something with "$file"
    done

Связанный контент