GNU Parallel is built for exactly this:
doit() {
gitFolder="$1"
parent=$(dirname $gitFolder);
Status=$(git -C $parent status)
if [[ $Status == *Changes* ]]; then
echo $parent;
git -C $parent status --porcelain
echo ""
elif [[ $Status == *ahead* ]]; then
echo "Push $parent";
echo
elif [[ $Status == *diverged* ]]; then
echo "Sync $parent";
echo
fi
}
export -f doit
find / -maxdepth 3 -not -path / -path '/[[:upper:]]*' -type d -name .git -not -path "*/Trash/*" -not -path "*/Temp/*" -not -path "*/opt/*" -print 2>/dev/null |
parallel -j0 doit
Grouping of output is done by default.
You can even let GNU Parallel compute $parent:
doit() {
parent="$1"
Status=$(git -C $parent status)
:
}
... | parallel -j0 doit {//}