คุณสามารถใช้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ผู้ใช้เห็นคำตอบนี้ด้วย