También puede usar el fx
operador para filtrar imágenes en función de la altura / anchura, p. Ej.
identify -format '%[fx:(h>400 && w>400)]\n' image.png
saldrá 1
si la imagen es más grande que 400x400
y 0
si es igual o más pequeña que 400x400
...
Suponiendo nombres de archivos sanos (sin líneas nuevas / espacios / pestañas, etc.) que podría usar identify
para imprimir nombres de imágenes precedidos por cualquiera de los dos , 1:
o 0:
procese la salida eliminando líneas que comienzan con 0:
y eliminando el inicio 1:
del resto de líneas para que solo queden los nombres de archivo. por línea, luego canalice esa lista a mogrify ... @-
( se agregó la @
sintaxisimagemagick v6.5.2
):
identify -format '%[fx:(h>400 && w>400)]:%i\n' ./*.png | \
sed '/^1:/!d;//s///' | mogrify -resize '400x400' -- @-
De lo contrario, find
podría imprimir solo los archivos con un tamaño> 400x400 y luego canalizar el resultado a xargs
+ mogrify
(es menos eficiente ya que ejecuta un shell para cada archivo pero debería funcionar con todo tipo de nombres de archivo):
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'
Si eres zsh
usuario, mira también esta respuesta .