У меня есть общий сценарий git "post-receive" для нескольких проектов, и он должен выполнять разные действия, если в корне существует папка / app / или / public /.
С помощью:
FOLDERS=`git ls-tree -d --name-only -z master`;
Я вижу список каталогов, и я хотел бы использовать поддержку RegExp в bash, чтобы запустить что-то вроде:
if [[ "$FOLDERS" =~ app ]]; then
...
fi
Но это не сработает, если будет что-то вроде "приложение lication "папка ... Я указал параметр" -z "в команде git" ls-tree ", чтобы я мог использовать символ \ 0 (null) в качестве разделителя, но не знаю, как проверить это в bash RegExp .
Точно так же я знаю, что существует поддержка для указания конкретного пути в команде ls-tree, и я мог бы затем передать его по конвейеру "wc -l", но я подумал, что было бы быстрее получить полный список каталогов корня (не рекурсивно), затем проверьте наличие 2 (или более) папок с возвращенным выводом.
Возможно связано с: https://stackoverflow.com/questions/7938094/git-how-to-check-which-files-exist-and-their-content-in-a-shared-bare-repos
Похоже, что символ NULL потерян (или проигнорирован), как будто в листинге есть «app» и «httpd», он будет соответствовать строке «apphttpd».
Итак, я пошел с вызовом "git ls-tree" несколько раз, чтобы увидеть, существует ли каждый отдельный файл.
if [ `git ls-tree -d --name-only master "$F" | wc -l` -eq 1 ]; then
fi