"Mein Name ist Mr. Wolf, ich löse Probleme." (PulpFiction)

Samstag, 18. August 2012

Bash: Fotos nach Tags sortieren

Wenn man seine Bilder mit sogenannten Tags versieht, z.B. mit diversen Bildbearbeitungsprogrammen, könnte man auf die Idee kommen, diese auch nach Tags sortiert in Verzeichnissen abzulegen. Nun die Bilder für jedes Tag zu kopieren ist etwas ineffizient, also erstelle ich Links.

Dazu nimmt man das folgende Bash Skript:

 1 #!/bin/bash
  2 SAVEIFS=$IFS
  3 IFS=$(echo -en "\n\b")
  4 for f in $(find /mnt/data/PicasaBilder | grep -i jpg); do
  5         echo $f;
  6         keywords="`exiftool -Keywords $f 2> /dev/null | sed -e 's/Keywords[ ]*: //'`";
  7         if  [ -n $keywords ] ; then 
  8                 IFS=","
  9                 for k in $keywords; do
 10                         echo $k;
 11                         k="`echo $k | sed -e "s/^ //"`";
 12                         if [ ! -e "/mnt/data/Bilder/Tags/$k" ] ; then
 13                                 mkdir "/mnt/data/Bilder/Tags/$k";
 14                                 echo Created "/mnt/data/Bilder/Tags/$k";
 15                         fi;     
 16                         ln -s "$f" "/mnt/data/Bilder/Tags/$k/";
 17                 done; 
 18                 IFS=$(echo -en "\n\b")
 19         fi;     
 20         
 21 done;



Was passier hier?
In Zeile 3 wird der s.g.  input field separator so angepasst, dass auch Dateinamen mit Leerzeichen im Namen von der for Schleife verstanden werden, dann durchlaufen wir alle jpg Dateien in den Unterverzeichnissen.
Zeile 6 extrahiert die Keywords. Hierbei war das exiftool das einzige shell taugliche Programm welches mir die "Keywords" lieferte (zu finden im Paket libimage-exiftool-perl).
Wenn es Keywords gibt (gefunden hier) dann den  input field separator auf das Komma setzen (kennt jemand eine Möglichkeit den auf ", " (KommaLeerstelle) zu setzen?)
und die unnötige Leerstelle entfernen (Zeile 11).
Zeilen 12 bis 15 prüfen ob das Verzeichnis existiert und legen es ggf. an.
Danach wird nur ein Link erstellt.
Nicht Vergessen, den  input field separator wieder richtig zu setzen (Zeile 18) 

Es gibt bestimmt noch Updates, aber das war es für heute.


Keine Kommentare:

Kommentar veröffentlichen