Ok, hier ein Beispiel wie wir scriptgesteuert Ordnung in das Chaos bringen und anhand der Bildgrößen oder andere EXIF-Daten die Bilder umbenennen/verschieben/konvertieren können.
Zuerst benötigen wir das Paket media-gfx/jhead, dieses stellt das Binary jhead zur Verfügung welches uns Informationen zu einem JPEG-Bild liefert, hier zwei Beispiele:
Code: Select all
# jhead 1.jpg
File name : 1.jpg
File size : 53555 bytes
File date : 2004:10:19 11:46:11
Resolution : 1200 x 798Code: Select all
# jhead 100_0640.jpg
File name : 100_0640.jpg
File size : 1004144 bytes
File date : 2005:07:03 15:12:50
Camera make : EASTMAN KODAK COMPANY
Camera model : KODAK CX7330 ZOOM DIGITAL CAMERA
Date/Time : 2005:07:03 15:12:45
Resolution : 1524 x 2032
Flash used : No (auto)
Focal length : 5.6mm (35mm equivalent: 37mm)
Exposure time: 0.0040 s (1/250)
Aperture : f/5.6
ISO equiv. : 120
Whitebalance : Auto
Metering Mode: matrix
Exposure : Action program (based towards fast shutter speed)Als Ausgangspunkt benutze ich find, um auch einfach Unterordner mit einschliessen zu können. Das Grundkonstrukt sieht hierbei so aus, hier werden Bildgrößen ausgewertet:
Code: Select all
find ./ -type f -iname '*.jpg' | while read file ; do
resolution=`jhead "${file}" | grep ^Resolution | cut -d ":" -f 2`
if [ "$resolution" != "" ] ; then # zur Sicherheit, wurde wirklich eine Größenangbe ermittelt
height=`echo $resolution | cut -d "x" -f 2 | sed -e "s/ //g"`
width=`echo $resolution | cut -d "x" -f 1 | sed -e "s/ //g"`
# hier kommt dann die weitere Verarbeitung des Bildes rein.
fi
doneje nach Hoch- oder Querformat anders behandeln:
Code: Select all
if [ $width -gt $height ] ; then
# spezielle Behandlunng von Querformatbildern
else
# spezielle Behandlunng von Hochformatbildern
fiCode: Select all
mv "${file}" "`dirname ${file}`/${width}x${height}_`basename ${file}`"(funktioniert nur bei casesensitiver Dateiendung, hier *.jpg, nicht bei *.JPG)
Code: Select all
mv "${file}" "`dirname ${file}`/`basename ${file} .jpg`_${width}x${height}.jpg"Code: Select all
if [ $width -gt $height ] && [ $width -lt 640 ] ; then
rm "${file}"
fiCode: Select all
find ./ -type f -iname '*.jpg' | while read file ; do
date=`jhead "$file" | grep ^Date | cut -d ":" -f 2- | cut -d " " -f 2`
if [ "$date" != "" ] ; then # zur Sicherheit, wurde wirklich eine Datum ermittelt
YY=`echo $date | cut -d ":" -f 1`
MM=`echo $date | cut -d ":" -f 2`
DD=`echo $date | cut -d ":" -f 3`
test -d "/zielverzeichnis/${YY}-${MM}-${DD}" || mkdir "/zielverzeichnis/${YY}-${MM}-${DD}"
mv "${file}" "/zielverzeichnis/${YY}-${MM}-${DD}"
fi
done

