Hi,
Ich versuche nun schon seit Stunden ein simples Script zu schreiben...
Ich habe einen Ordner "Bildertemp", und darin liegen zwei Ordner "Vorher" und "Nacher". Im Ordner "Bildertemp" soll nun auch noch ein kleines ausführbares Script liegen, das folgendes tun soll:
Im Ordner "Vorher" liegen einige jpgs, und nun sollen beim Ausführen des Scripts alle jpgs per "convert -resize 35% -quality 85" verkleinert und qualitativ etwas verschlechtert werden. Ausserdem sollen die dabei erstellten neuen jpgs im Ordner "Nacher" abgelegt werden, wobei die Originale unverändert im Ordner "Vorher" bleiben sollen. Evtl. sollen die neuen jpgs ein suffix à la "resized-" erhalten.
Angenommen man will lediglich alle jpgs eines Ordner konvertieren, ohne sie zu verschieben, kann das script so aussehen:
Zitat#!/bin/sh
find ./ -name '*.jpg' -exec convert -resize 35% -quality 85 {} {}.jpg \;
Doch da ich sie ja verschoben haben will, und das script ausserdem im übergeordneten Ordner liegt, schrieb ich es so:
Zitat#!/bin/sh
find ./Vorher/ -name '*.jpg' -exec convert -resize 35% -quality 85 {} ../Nacher/{}.jpg \;
Dies funktioniert allerdings nicht, weil "find -name" immer den ganzen Pfad an {} sendet, in diesem Fall also "./Vorher/*.jpg", was darin resultiert, dass der Zielpfad bei "convert" nun "../Nacher/./Vorher/*.jpg.jpg" lautet, was völliger Unsinn ist.
Also versuchte ich es so:
Zitat#!/bin/sh
cd Vorher/
find ./ -name '*.jpg' -exec convert -resize 35% -quality 85 {} resized-{}.jpg \;
mv resized* ../Nacher/
Aber auch dies schlägt fehl, weil convert auch in diesem Fall "resized-./*.jpg.jpg" verwendet. Das Problem liegt also darin, dass ich nur den Namen der Datei brauche, also *, und weder *.jpg, noch ./*.jpg.
Wie muss ich find verwenden, um nur den Namen der Datei in {} eingesetzt zu bekommen? Oder gibt es eine andere möglichkeit, viele Bilder gleichzeitig und in einem Zug zu konvertieren? Vielleicht sogar mit Fortschrittanzeige? Evtl. ein Programm im Stil von IrfanView für Windows?