Эмуляция статуса git – вызывается в папке без репозитория

Это может быть, по сути, дубликат этого вопроса , однако предоставленный perl-скрипт не работал в моем случае, насколько я могу судить. Есть также много вопросов о поиске нескольких шаблонов, но их на удивление сложно найти, потому что Google, похоже, не делает различий между «файлом шаблонов» и «образным именем файла».

Я хотел бы подражать

git status --ignored --porcelain | awk '{print $2}' 

в папке без репозитория. То есть, я хотел бы указать файлы и каталоги, которые соответствуют шаблонам, перечисленным в (указанном) файле, со следующими ограничениями :

  • шаблоны написаны с синтаксисом gitignore , в частности пустые строки и комментарии должны игнорироваться скриптом;
  • скрипт должен перейти из текущего рабочего каталога;
  • сценарий не должен идти в сопоставленные каталоги (т. е. совпадение всегда – лист) или в символические ссылки.

Вот простой пример:

 $> cat .gitignore *.DS_Store* tmp/ a/**/foo $> tree -a . . |-- .DS_store |-- .gitignore |-- a | |-- b | | |-- foo | | | `-- file | | `-- tmp | |-- foo | `-- tmp | `-- file `-- c |-- .DS_Store? `-- foo 5 directories, 8 files $> git status --ignored --porcelain | awk '{print $2}' .DS_store a/b/foo/ a/foo a/tmp/ c/.DS_Store? 

Если это вообще возможно, меня бы особенно интересовали решения, которые работают как на osx, так и на linux, и которые могут быть расширены, чтобы рассматривать шаблоны в формате posix-egrep. Для этой последней части что-то похожее find . -print | egrep -f patternfile find . -print | egrep -f patternfile find . -print | egrep -f patternfile может работать, хотя это будет идти в соответствующие каталоги, что потенциально может сделать вещи очень медленными.

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