Siduction Forum

Siduction Forum => Scripting & Kernelhacking => Topic started by: pit on 2012/11/04, 17:00:23

Title: Hilfe bei einem bash Script benötigt (mvpics)
Post by: pit on 2012/11/04, 17:00:23
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:

Code: [Select]
#!/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:

Code: [Select]
├── 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?
Title: Hilfe bei einem bash Script benötigt (mvpics)
Post by: agaida on 2012/11/04, 18:11:12
so was in der Art für 1:

Code: [Select]

for i in jpg JPG; do
  for k in *.${i}; do
     [ -e ${k} ] && echo "Filename: ${k}"
  done
done


Das Exif-Feld solltest Du auch so abgefangen bekommen.

Das Verzeichnis auch.
Title: RE: Hilfe bei einem bash Script benötigt (mvpics)
Post by: pit on 2012/11/04, 19:10:51
@agaida

Vielen Dank! Fall 1 ist damit schon mal erledigt:

http://paste.debian.net/206445/

Ich stehe allerdings beim Übertragen auf Fall 2 und 3 gedanklich auf dem Schlauch ...
Title: RE: Hilfe bei einem bash Script benötigt (mvpics)
Post by: bluelupo on 2012/11/04, 19:18:50
Hi pit,
zu deinen 2. Fall.

Code: [Select]

if [ "$filenumb" ] # wenn in der Variable etwas steht
   then
   echo "to do"
elif [ "$filenumb" = "" ]  # wenn in der Variable nichts steht, also leer
   then
   echo "nothing to do"
fi

...ist das was du suchst?
Title: RE: Hilfe bei einem bash Script benötigt (mvpics)
Post by: agaida on 2012/11/04, 23:02:34
Fall 3:

Code: [Select]

dirfilename="%Y/%m/%Y%m%d/%H%M%S"
-----------------------------------
DIR="%Y/%m/%Y%m%d"
a) mkdir -p ${DIR}
b) [ ! -d ${DIR} ] &&  mkdir -p ${DIR}


Keine Ahnung, was mehr kostet. Aber das dürfte in diesem Fall auch einfach egal sein.
Title: RE: Hilfe bei einem bash Script benötigt (mvpics)
Post by: pit on 2012/11/05, 00:20:33
@bluelupo: Danke, das sieht machbar aus.
@agaida: Verd...., da hätte ich selber drauf kommen können, den Schalter p hätte mir ein man mkdir verraten können. Da habe ich wohl mal wieder um zu viele Ecken gedacht.

Zusammenschustern werde ich das wohl heute Nacht nicht mehr. Das Ergebnis kann ich dann gerne hier posten, wenn's nicht zu trivial für euch ist.