आप भी 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
उपयोगकर्ता हैं तो यह उत्तर भी देखें ।