Как реализовать что-то вроде VCS статус / игнорировать программу? - PullRequest
1 голос
/ 16 декабря 2011

в $dir, я хочу получить обзор всех файлов / каталогов (рекурсивно), но:

  • исключить все файлы / директории, которые включены в $list (предположим $ list* разделены символом новой строки)
  • включает только каталоги самого высокого уровня, не включенные в $list вместо целых деревьев под ними

В настоящее время я использую:

cd $dir && git init && echo "$list" > .gitignore && git status && rm -rf .git .gitignore

это просто, и список «неотслеживаемых файлов» - это то, что мне нужно, но он не совсем чистый, так как он выполняет кучу ненужных операций ввода-вывода файловой системы для репозитория tmp git и игнорирует файл.

Я также размышлял find с действиями обрезки или чем-то вроде empty=$(mktemp -d) && rsync -nv --exclude-from=$list $dir/ $empty, но они не сработали бы так, как я хочу.

как бы вы это реализовали?Есть ли какой-либо существующий инструмент оболочки / Python / ..., который делает именно это?или я могу как-то повторно использовать код git, не создавая временный репозиторий git (или другой инструмент vcs?)?

1 Ответ

1 голос
/ 23 февраля 2012

Заранее извиняюсь за краткий 1-строчный формат (так было проще проверить)

for FILE in `find .`; do eval "case \"$FILE\" in "$list");;*)echo \"$FILE\";;esac";done

формат для списка будет "./path/to/file|dir|dir/*|*allfilesmatchingthis*|*.git..."

замените эхо на любую команду типа "status", которая подходит

...