我有一个用于多个项目的通用 git“post-receive”脚本,如果根目录中存在 /app/ 或 /public/ 文件夹,它需要执行不同的操作。
使用:
FOLDERS=`git ls-tree -d --name-only -z master`;
我可以看到目录列表,并且我想使用 bash 中的 RegExp 支持来运行类似以下操作:
if [[ "$FOLDERS" =~ app ]]; then
...
fi
但如果有类似“应用程序lication”文件夹...我在 git“ls-tree”命令中指定了“-z”选项,这样我可以使用 \0(空)字符作为分隔符,但不确定如何在 bash RegExp 中测试它。
同样,我知道支持在 ls-tree 命令中指定特定路径,然后可以将其通过管道传输到“wc -l”,但我认为获取根的完整目录列表(非递归)然后使用返回的输出测试 2 个(或更多)文件夹会更快。
答案1
看起来 NULL 字符丢失了(或被忽略了),好像列表包含“app”和“httpd”,它将匹配字符串“apphttpd”。
因此我暂时多次调用“git ls-tree”来查看每个单独的文件是否存在。
if [ `git ls-tree -d --name-only master "$F" | wc -l` -eq 1 ]; then
fi