Ви також можете використовувати 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
користувач, дивіться також цю відповідь .