Bạn cũng có thể sử dụng fx
toán tử để lọc hình ảnh dựa trên chiều cao / chiều rộng, vd
identify -format '%[fx:(h>400 && w>400)]\n' image.png
sẽ xuất ra 1
nếu hình ảnh lớn hơn 400x400
và 0
nếu nó bằng hoặc nhỏ hơn 400x400
...
Giả sử tên tệp sane (không có dòng mới / dấu cách / tab, v.v.) bạn có thể sử dụng identify
để in tên hình ảnh đi trước 1:
hoặc 0:
, xử lý các dòng xóa đầu ra bắt đầu 0:
và xóa đầu dòng 1:
trên phần còn lại của dòng để chỉ còn lại tên tệp, một trên mỗi dòng, sau đó đặt danh sách đó vào mogrify ... @-
( @
cú pháp đã được thêm vào imagemagick v6.5.2
):
identify -format '%[fx:(h>400 && w>400)]:%i\n' ./*.png | \
sed '/^1:/!d;//s///' | mogrify -resize '400x400' -- @-
Mặt khác, với find
bạn chỉ có thể in các tệp có kích thước> 400x400 và sau đó chuyển kết quả thành xargs
+ mogrify
(nó kém hiệu quả hơn vì nó chạy vỏ cho mỗi tệp nhưng nó sẽ hoạt động với tất cả các loại tên tệp):
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'
Nếu bạn là zsh
người dùng cũng thấy câu trả lời này .