Um -exec precisa ser finalizado com ; ou + . O ; faz com que o comando seja executado uma vez por nome de arquivo encontrado, enquanto + faz com que o comando seja executado uma vez para todos os nomes de arquivos.
Aqui está um exemplo de trabalho:
find ! -iname "*.JPG" -exec dirname {} \;
Algumas diferenças notáveis de suas tentativas:
- Deve haver um espaço entre
{}e\; - O
;deve ter escape, porque é um metacaractere do shell. - Como @muru apontou em sua resposta,
-inameusa glob, não regex