Sie können den fx
Operator auch verwenden , um Bilder basierend auf Höhe / Breite zu filtern, z
identify -format '%[fx:(h>400 && w>400)]\n' image.png
wird ausgegeben, 1
wenn das Bild größer als 400x400
und 0
wenn es gleich oder kleiner als 400x400
...
Unter der Annahme vernünftiger Dateinamen (keine Zeilenumbrüche / Leerzeichen / Tabulatoren usw.) können Sie Bildnamen identify
drucken, denen entweder vorangestellt ist, 1:
oder 0:
die Ausgabe verarbeiten, 0:
indem Sie Zeilen löschen, die mit den Zeilen beginnen und die führenden 1:
Zeilen entfernen , sodass nur die Dateinamen übrig bleiben pro Zeile, dann leiten Sie diese Liste an mogrify ... @-
(die @
Syntax wurde hinzugefügt in imagemagick v6.5.2
):
identify -format '%[fx:(h>400 && w>400)]:%i\n' ./*.png | \
sed '/^1:/!d;//s///' | mogrify -resize '400x400' -- @-
Andernfalls find
könnten Sie mit nur die Dateien mit einer Größe> 400x400 drucken und dann das Ergebnis an xargs
+ weiterleiten mogrify
(es ist weniger effizient, da für jede Datei eine Shell ausgeführt wird, aber es sollte mit allen Arten von Dateinamen funktionieren):
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'
Wenn Sie ein zsh
Benutzer sind, sehen Sie auch diese Antwort .