Você também pode usar o fx
operador para filtrar imagens com base na altura / largura, por exemplo
identify -format '%[fx:(h>400 && w>400)]\n' image.png
será exibida 1
se a imagem for maior que 400x400
e 0
se for igual ou menor que 400x400
...
Assumindo nomes de arquivos sãos (sem novas linhas / espaços / guias, etc.), você pode usar identify
para 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, find
você 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 zsh
usuário, veja também esta resposta .