检查 Git 存储库中是否存在文件夹...测试 bash 中是否存在以 NULL 为分隔符的子字符串

检查 Git 存储库中是否存在文件夹...测试 bash 中是否存在以 NULL 为分隔符的子字符串

我有一个用于多个项目的通用 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 个(或更多)文件夹会更快。

可能相关于: https://stackoverflow.com/questions/7938094/git-how-to-check-which-files-exist-and-their-content-in-a-shared-bare-repos

答案1

看起来 NULL 字符丢失了(或被忽略了),好像列表包含“app”和“httpd”,它将匹配字符串“apphttpd”。

因此我暂时多次调用“git ls-tree”来查看每个单独的文件是否存在。

if [ `git ls-tree -d --name-only master "$F" | wc -l` -eq 1 ]; then
fi

相关内容