我有这段代码来检查我所有的 git 文件夹的状态。
find / -maxdepth 3 -not -path / -path '/[[:upper:]]*' -type d -name .git -not -path "*/Trash/*" -not -path "*/Temp/*" -not -path "*/opt/*" -print 2>/dev/null |
{
while read gitFolder; do
(
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
) &
done
wait
}
当我按顺序运行它时,我在终端中得到了一个很好的可读打印。但是速度越来越慢。当我并行运行它(使用&
)时,我得到了很好的速度,但输出变得一团糟。
是否可以以某种方式锁定每个内壳的输出并将每个内壳的标准输出打印在一个块中?
GNU Parallel 正是为此而构建的:
默认情况下完成输出分组。
你甚至可以让 GNU Parallel 计算 $parent: