Ich habe ein kleines bash-Script geschrieben, das mir Fotos von einer SD-Karte in mein lokales Medienverzeichnis verschiebt. Auf der SD-Karte der Digitalkamera befinden sich Dateien des Typs jpg, mov und 3gp. Die Extensions sind manchmal in Klein-, manchmal auch in Großbuchstaben. Die Exif-Daten der jpg-Dateien enthalten manchmal einen Wert für Filenumber, manchmal (z.B. die Fotos vom Smartphone) auch nicht.
Das Script:
#!/bin/bash
basedir="/home/pit/digipics"
dirfilename="%Y/%m/%Y%m%d/%H%M%S"
for i in *.jpg *.JPG; do
filenumb=`exiftool -filenumber -s3 $i | cut -d "-" -f 2`;
suffix="-"$filenumb
exiftool '-FileName<${CreateDate}' -d
## TEIL 1 - BILDER UMBENENNEN UND VERSCHIEBEN ##
$basedir/$dirfilename$suffix.jpg $i;
done
for m in *.mov *.MOV *.3gp; do
extension=${m##*.};
filename=`date -r $m +$dirfilename`.$extension;
## TEIL 2 - VIDEOS UMBENENNEN UND VERSCHIEBEN ##
mv $m $basedir/$filename;
done
## TEIL 3 - THUMBNAILS LÖSCHEN ##
for x in *.THM *.thm; do
rm $x;
done
Und diese Verzeichnisstruktur wird gebaut:
├── 2009
│ └── 08
│ └── 20090829
│ └── 085151-0104.jpg
├── 2011
│ └── 03
│ └── 20110331
│ ├── 142018-0416.jpg
│ └── 142108.mov
└── 2012
├── 10
│ ├── 20121014
│ │ ├── 130908-.jpg
│ │ └── 170323-0004.jpg
│ └── 20121031
│ └── 190100-.jpg
└── 11
├── 20121102
│ ├── 123135-.jpg
└── 20121104
└── 160754.jpg
Frage 1: Ich möchte, dass die beiden Befehle (Teil1, Teil2) nur dann loslegen, wenn auch Dateien vorhanden sind. Im obigen Beispiel gibt es z.B. keine *.JPG Dateien (Extension in Großbuchstaben), die Schleife sucht aber dennoch u. gibt auf der Konsole Fehlermeldungen aus. Wie formuliere ich eine entsprechende Bedingung?
Frage 2: Wie formuliere ich eine Bedingung, die $filenumb inklusive führendem Bindestrich nur dann in die Variable $suffix schreibt, wenn das Exif-Feld -filenumber einen Wert enthält? Im Ergebnis soll bei leerem Exif-Feld lediglich so ein Dateiname erzeugt werden: 120000.jpg (also stunde/minute/sekunde.jpg). Ist ein Wert im Exif-Feld vorhanden, wäre z.B. dies das Ergebnis: 120000-0001.jpg (0001 steht für Exif-Filenumber).
Frage 3: Wenn an einem Tag nur ein einziges Video entstanden ist, scheitert der mv-Befehl, da das durch die Variable $filename übergebene Verzeichnis noch nicht existiert. Wie bastele ich da eine Anweisung rein, die in solchen Fällen zunächst das Zielverzeichnis anlegt?