A instrução continuar dentro do bloco if é a fonte do seu problema:
Se nenhum arquivo MP3 for encontrado, cd ..
não será executado e a condição [[ -d "${DIR}" ]]
provavelmente falhará em todos os diretórios restantes.
Eu estava tentando encontrar as pastas na minha coleção de músicas que não contêm arquivos mp3 (algumas têm apenas arte de álbum, ou listas de reprodução e similares). Então eu tive algo parecido com isso em um script de shell.
#!/bin/bash
for DIR in *
do
[[ -d "${DIR}" ]] || continue
cd "${DIR}"
ls *.mp3 > /dev/null 2>&1
if [[ "$?" != "0" ]]
then
echo $DIR has no MP3 files!
continue
fi
cd ..
done
Mesmo assim, embora haja muitas pastas, esse script só verifica o primeiro antes de sair ... por que isso acontece? É como se o continue
dentro do if
estivesse saindo totalmente do loop.