Portál AbcLinuxu, 30. dubna 2025 11:20

csv2iptc

15.3.2008 20:19 | Přečteno: 769× | Linux

Potřebuji na svém počítači popisovat větší množství fotografií IPTC tagy. Jan Saidl (web), kterému tímto ještě jednou děkuji, mi zaslal svůj skript, využívající programu exiv2. Tento skript zpracuje informace, zapsané v xls souboru, a vyplní jimi IPTC tagy jpg obrázků z fotogalerie v daném adresáři.

Přidal jsem získání proměnných údajů z parametrů, možnost zapsání titulku obrázku a ignoraci prázdných řádků v csv souboru, které některé editory s oblibou na konec souboru ukládají. Vylepšil jsem vyhledávání souborů a kompatibilitu s různými typy csv souborů, tím že jsem přidal možnost nastavit podobu separátorů csv souborů. Při zpracovávání csv beru ohled na to že například gnumeric nevkládá jednoslovné položky buněk mezi oddělovače textu, zatímco například openoffice-calc ano.

Pokud jsou data uložena v xls souboru, doporučuji využít programu xls2csv pro převod na csv soubor.


#!/bin/bash

# vychozi hodnoty parametru
src_f=""
dst_d=""
sep_txt="\""
sep_col=","

# zpracovani parametru
while getopts ":hs:d:c:t:" optname
  do
    case "$optname" in
      "h") 
        echo "csv2iptc"
        echo "description: "
        echo "  fills .jpg photos in specifed dir with tags from specifed file."
        echo "usage: "
        echo "  requied csv column order: "
        echo "    <name> <author> <title> <description> <keywords>"
        echo "  options: "
        echo "    -h         displays help"
        echo "    -s <file>  sets path to source csv file"
        echo "    -d <dir>   sets path to destination gallery directory"
        echo "    -c <str>   sets csv-column separator (default ',')"
        echo "    -t <str>   sets csv-text separator (default '\"')"
        ;;
      "s")
        src_f="${OPTARG}"
        ;;
      "d")
        dst_d="${OPTARG}"
        ;;
      "c")
        sep_col="${OPTARG}"
        ;;
      "t")
        sep_txt="${OPTARG}"
        ;;
      "?")
        echo "Unknown option $OPTARG"
        ;;
      ":")
        echo "No argument value for option $OPTARG"
        ;;
      *)
        echo "Unknown error while processing options"
        ;;
    esac
  done

# pruchod pres csv
count=0
exitcount=0
cmd="cmd.txt"
cat "$src_f" | while read line; do 

  # opakuji-li se prazdne radky, koncime
  if [ "$exitcount" -eq "10" ]; then
    break
  fi

  # preskoceni prazdneho radku
  if [ "${line//,/}" = "" ]; then 
    exitcount=$(($exitcount + 1))
    continue
  else
    exitcount=0
  fi

  # oddeli sloupce
  line=${line//"${sep_txt}${sep_col}"/;}
  line=${line//"${sep_col}${sep_txt}"/;}
  line=${line//"${sep_txt}"}

  # ziskani bunek
  name=`echo $line | cut -d ";" -f 1`
  author=`echo $line | cut -d ";" -f 2`
  title=`echo $line | cut -d ";" -f 3`
  description=`echo $line | cut -d ";" -f 4`
  keywords=`echo $line | cut -d ";" -f 5`

  # inkrementace, vypis nazvu aktualni fotky	
  count=$(($count + 1))	
  echo -n $count $name

  # TED musim najit umisteni souboru $name nekde v $dst_d
  filename=`find ${dst_d} \( -name "${name}.[jJ][pP][gG]" \)`
  if [ ! -f "${filename}" ]; then
    echo " - soubor nenalezen ${filename}"
    continue
  fi
  
  # TED musim nastavit hodnoty:
  echo "set Iptc.Application2.ObjectName String \"$description\"" > $cmd
  echo "set Iptc.Application2.Caption String \"$description\"" >> $cmd
  echo "set Iptc.Application2.Byline String \"$author\"" >> $cmd
  echo "set Iptc.Application2.Headline String \"$title\"" >> $cmd
  echo "set Exif.Image.ImageDescription Ascii \"$description\"" >> $cmd
  echo "del Iptc.Application2.Keywords" >> $cmd
  echo $keywords "," | while read -d "," keyword; do
    echo "add Iptc.Application2.Keywords String \"$keyword\"" >> $cmd
  done
	    
  # zapis tagu
  exiv2 -m "$cmd" "$filename"
  echo " - done" 	
done

# odstraneni pomocnych souboru
rm $cmd
       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.