Você também pode usar o fxoperador para filtrar imagens com base na altura / largura, por exemplo
identify -format '%[fx:(h>400 && w>400)]\n' image.png
será exibida 1se a imagem for maior que 400x400e 0se for igual ou menor que 400x400...
Assumindo nomes de arquivos sãos (sem novas linhas / espaços / guias, etc.), você pode usar identifypara imprimir nomes de imagens precedidos por qualquer um , 1:ou 0:processar a saída excluindo linhas que começam com 0:e removendo a liderança 1:no restante das linhas, para que apenas os nomes dos arquivos permaneçam. por linha, em seguida, canalize essa lista para mogrify ... @-(a @sintaxe foi adicionada imagemagick v6.5.2):
identify -format '%[fx:(h>400 && w>400)]:%i\n' ./*.png | \
sed '/^1:/!d;//s///' | mogrify -resize '400x400' -- @-
Caso contrário, findvocê poderá imprimir apenas os arquivos com tamanho> 400x400 e canalizar o resultado para xargs+ mogrify(é menos eficiente, pois executa um shell para cada arquivo, mas deve funcionar com todos os tipos de nomes de arquivos):
find . -maxdepth 1 -type f -name '*.png' -exec sh -c \
'identify -format "%[fx:(h>400 && w>400)]\n" "$0" | grep -q 1' {} \; -print0 \
| xargs -0 mogrify -resize '400x400'
Se você é um zshusuário, veja também esta resposta .