Se você instalar o ImageMagick, poderá usar o seguinte comando para testar se algo está em escala de cinza:
$ convert bw.jpg -format "%[colorspace]" info:
Gray
Para instalar:
sudo apt-get install imagemagick
Então, para percorrer todos eles e mover:
for i in /images/folder ; do
if [ "$(convert $i -format "%[colorspace]" info:)" == "Gray" ]; then
mv "$i" /images/folder/bw
fi
done
No entanto, esse método só testa o espaço de cores que uma imagem está usando. Uma imagem pode estar usando um espaço de cores RGB completo, enquanto na verdade só está usando tons de escala de cinza (o ideal é que eles sejam convertidos em tons de cinza para serem ideais).
A fim de trabalhar é apenas usando tons de cinza, uma opção é converter a imagem para a cor HSL, em seguida, calcular a saturação média de uma imagem. Para uma imagem em tons de cinza real, a saturação média será zero. Com imagens em escala de cinza em jpg, você terá um pouco de desvio da escala de cinza perfeita devido a artefatos, e geralmente eles não são perfeitos dependendo de como eles acabaram em preto e branco.
Esta imagem, por exemplo:
SeconvertermosissoemHSLeobtermosasaturaçãomédia:
$convertblack-and-white-comics.jpg-colorspaceHSL-channelg\>-separate+channel-format"%[fx:mean]" info:
0.00781798
A saída da figura varia de 0 a 1, então você teria que definir um limite sob o qual você considera algo como escala de cinza, dependendo dos arquivos de origem.