Você pode usar -not :
find . -maxdepth 1 -type f -name '*.sh' -not -name cron.sh -delete
Além disso, o GNU find tem a opção -delete , que é mais simples de usar e que rm -rf .
Importante : coloque sempre -delete no final. Conforme explicado em man find :
Avisos: Não esqueça que a linha de comando de localização é avaliada como uma expressão, então colocar-apague primeiro fará com que a tentativa tente exclua tudo abaixo dos pontos iniciais que você especificou.
Como alternativa, você pode usar um loop de shell (mas não, o comando find acima é muito mais eficiente):
for f in *.sh; do [ "$f" = "cron.sh" ] || rm "$f"; done