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