Desagradável. Mas de certo modo, você está procurando problemas quando dois processos concorrentes estão manipulando uma árvore de diretórios. O Unix fornece primitivas para manipulação atômica de um único arquivo, mas não para árvores inteiras de diretório.
Uma solução simples seria o seu script renomear o diretório antes de removê-lo. Como o seu caso de uso tem scripts cooperativos, é aceitável que o novo nome seja previsível.
mv /build/tree /build/tree.rm.$$
mkdir /build/tree
rm -rf /build/tree.rm.$$
Talvez você possa até mesmo fazer o rm
em segundo plano, enquanto sua compilação executa algumas tarefas vinculadas à CPU.