rm (onde lê a resposta de prompt) é /dev/null (definido por GNU xargs, algumas outras implementações de xargs o manteriam como o pipe de ls).
Seu sh está recebendo muitos argumentos de uma vez, mas você está processando apenas um ( $1 ).
Observe também que o caractere de nova linha é tão válido quanto qualquer outro em um nome de arquivo, e é por isso que geralmente não é possível processar a saída de ls de forma confiável.
com zsh :
for dir (*(ND/)) {
flacs=($dir/*.flac(ND.))
(($#flacs)) || rm -ri -- $dir
}
Caso contrário, você poderia fazer:
find . ! -name . -prune -type d -exec sh -c '
for dir do
find "$dir/." ! -name . -prune -type f -name "*.flac" | read f ||
rm -ri "$dir"
done' sh {} +