Hi.
Ich schreibe gerade ein Sh-Skript für Unix (spezieller Linux), das alle Bilder in allen Unterverzeichnissen des angegebenen Verzeichnisses verkleinern soll, wenn deren Breite 1024px übersteigt.
#!/bin/sh
directory="/home/lori/webs/bilder_orig/*"
#In $dir sind die Ordner aus bilder_orig
#In $file sind die Bilder aus allen $dir
for dir in $directory ;
do
#Existiert der Ordner "neu" in den Unterverzeichnissen schon?
if [ -d $dir'/neu' ]
then
#Wenn ja, dann Meldung ausgeben und nichts machen
echo Ordner $dir'/neu' existiert
else
#Wenn nicht, dann erstellen und Rechte setzen
mkdir $dir'/neu'
chmod 777 $dir'/neu'
dir2=$dir
dir=$dir'/*'
for file in $dir ;
do
#Jedes Bild, dessen Breite höher als 1024px ist, verkleinern
cd $dir2
filename=`basename $file`
#Wenn die zu bearbeitende Datei eine Datei ist, dann bearbeiten. Grund: Ordner "neu" wird nicht mitinbegriffen
if [ -f $file ]
then
#< und > scheinen bei dieser Version von imagemagick nicht zu funktionieren
convert -resize 1024> $filename 'neu/'$filename
fi
done
fi
done
Das Skript gibt mir für jede Datei die Meldung
./makeimgsmall.sh: line 30: 1024: Ungültiger Dateideskriptor
aus.
Außerdem zerstört es die Originalbilder. Sicherungskopien hurra :D
Hat jemand vielleicht auch eine Idee wie ich das Skript schneller machen kann? Weil zwei for-Schleifen ineinander zu verschachteln ist nicht gerade vorteilhaft.
Wie lautet denn die richtige Syntax für convert, damit alle Bilder deren Breite größer als 1024px ist, zu verkleinern auf 1024px zu * ?
Version ImageMagick 6.2.3
Danke
Lori