Вы также можете использовать fxоператор для фильтрации изображений на основе высоты / ширины, например
identify -format '%[fx:(h>400 && w>400)]\n' image.png
выведет, 1если изображение больше чем 400x400и 0если оно равно или меньше чем 400x400...
Предполагая, что вменяемые имена файлов (без новых строк / пробелов / табуляции и т. Д.) Можно использовать identifyдля печати имен изображений, которым предшествует либо 1:либо 0:, либо , обрабатывать вывод, удаляя строки, начинающиеся с, 0:и удаляя ведущие 1:в остальных строках, чтобы остались только имена файлов, один в строке, затем направьте этот список в mogrify ... @-( @синтаксис был добавлен в imagemagick v6.5.2):
identify -format '%[fx:(h>400 && w>400)]:%i\n' ./*.png | \
sed '/^1:/!d;//s///' | mogrify -resize '400x400' -- @-
В противном случае findвы можете распечатать только файлы размером> 400x400 и затем передать результат в xargs+ mogrify(это менее эффективно, так как запускает оболочку для каждого файла, но должно работать со всеми видами имен файлов):
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'
Если вы zshпользователь, посмотрите также этот ответ .