while IFS='' read -rd '' filename; do
[[ $(file -b --mime-type "$filename") = image/x-ms-bmp ]] \
&& mogrify -format jpg "$filename"
done < <(LC_ALL=C find . -maxdepth 1 -name '*.jpg' -print0)
funcionará, desde que sua versão de file
produza image/x-ms-bmp
quando receber um arquivo BMP como argumento de file -b --mime-type
. Caso contrário, você precisa modificar o script.
Muitos usuários se contentariam com a versão mais simples
for filename in ./*.jpg; do
[[ $(file -b --mime-type "$filename") = image/x-ms-bmp ]] \
&& mogrify -format jpg "$filename"
done
que, no entanto, falharia em algumas circunstâncias: 1) se você tem um muito grande número de arquivos com nomes longos muito (digamos, 30000 nomes de arquivos de tamanho médio ) 2) se seus nomes de arquivos contiverem caracteres realmente estranhos.
A primeira versão é garantida contra essas inconveniências raras.