在bash脚本中,我想知道目录中是否存在未分级的文件。
我能得到的最接近的是检查退出代码:
git ls-files --other --error-unmatch --exclude-standard --directory "$folder/" > /dev/null 2>&1
有两个缺点。
/dev/null
,这可能需要很长时间才能完成某些回购理想情况下,我想在找到未跟踪文件时立即停止播放 - 我不需要知道它们是什么,只要它们在那里
答案 0 :(得分:2)
如果您对git命令感到满意,可以输入grep -q
,其返回码将告诉您是否有任何输出:
git ls-files --other --exclude-standard --directory "$folder/" | grep -q .
一旦grep收到任何输入,模式.
就会匹配,并且它会成功退出。
要抑制错误输出,您可以将整个内容包装在花括号{ }
中,并将2>/dev/null
添加到最后。
另一种选择是解析git status
的输出。例如,要查看输出中的任何文件是否具有以$directory
开头的路径,您可以使用:
git status --porcelain | awk -v dir="$dir" 'index($2, dir) == 1 { found = 1; exit } END { exit !found }'
如果您的awk版本支持将记录分隔符设置为空字节,则可以改为使用git status -z
:
git status -z | awk -v RS='\0' -v dir="$dir" 'index($2, dir) == 1 { found = 1; exit } END { exit !found }'
要过滤掉未跟踪的文件,您可以添加“$ 1!=" ??"”的检查:
git status -z | awk -v RS='\0' -v dir="$dir" '$1 != "??" && index($2, dir) == 1 { found = 1; exit } END { exit !found }'
答案 1 :(得分:0)
不确定它是更快还是更慢,但git clean -n
会列出未上传的文件。
这并不能解决第一个非分段文件"停止的问题。找到了,但似乎没有好办法做到这一点。