schollsky schrieb:
Warum gibst Du den Parameter -type f an? Das sollte eigentlich überflüssig sein.
Nee, wieso? Man will ja keine Verzeichnisse bearbeiten. Und es ist immerhin möglich, auch einen Verzeichnisnamen mit ".jpg" enden zu lassen.
Ausserdem sollte am Ende der Pipe der Löschbefehl stehen.
Es gibt auch einen anderen Ansatz: find um die Namen zu ermitteln und dann eine Schleife laufe lassen:
| find -type f -iname \*.jpg -exec sh -c 'for f; do
[ $(identify -format '%wx%h' "$f") = 120x120 ] && rm -v "$f"
done' -- {} +
|
Nachteil ist natürlich, dass der indentify für jede Datei einzeln aufgerufen wird.
Die Lösung von seahawk würde ich so modifizieren:
| find -iname \*.jpg -type f -exec identify -format '%wx%h %i\n' {} + | sed -ne 's#^120x120 ##p' | xargs -rd \\n rm -v
|
Wesentliche Unterschiede:
identify wird nicht ein Mal pro Datei sondern für mehrere Dateien ausgeführt.
sed wird gleichzeitig zu Selektieren der Dateien und zum Entfernen der Größenangabe genutzt
xargs ruft den Befehl nicht auf, wenn keine Dateinamen gefunden werden ("-r") und trennt am Zeilenende und nicht bei Whitespace ("-d \\n"). Das ist etwas sicherer:
| $ echo 111 222 | xargs printf '%s\n'
111
222
$ echo 111 222 | xargs -d \\n printf '%s\n'
111 222
|