Вы также можете использовать 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
пользователь, посмотрите также этот ответ .