Welcome, Guest. Please login or register.
Did you miss your activation email?

Author Topic: [DE] Hilfe bei einem bash Script benötigt (mvpics)  (Read 5365 times)

Offline pit

  • User
  • Posts: 237
[DE] Hilfe bei einem bash Script benötigt (mvpics)
« 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?

Offline agaida

  • User
  • Posts: 1.760
    • http://g-com.eu
Hilfe bei einem bash Script benötigt (mvpics)
« Reply #1 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.
There's this special biologist word we use for "stable". It's "dead". ~ Jack Cohen

Offline pit

  • User
  • Posts: 237
RE: Hilfe bei einem bash Script benötigt (mvpics)
« Reply #2 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 ...

Offline bluelupo

  • User
  • Posts: 2.068
    • BluelupoMe
RE: Hilfe bei einem bash Script benötigt (mvpics)
« Reply #3 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?

Offline agaida

  • User
  • Posts: 1.760
    • http://g-com.eu
RE: Hilfe bei einem bash Script benötigt (mvpics)
« Reply #4 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.
There's this special biologist word we use for "stable". It's "dead". ~ Jack Cohen

Offline pit

  • User
  • Posts: 237
RE: Hilfe bei einem bash Script benötigt (mvpics)
« Reply #5 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.