Bạn cũng có thể sử dụng fxtoá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 1nếu hình ảnh lớn hơn 400x400và 0nế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 findbạ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à zshngười dùng cũng thấy câu trả lời này .