Skrypt iPhoto do eksportu zdjęć

Posted on Tue 09 September 2008 in Tips 4 Mac OSX • [2 min read]

Zupełnie przypadkiem moje skrypty mogą służyć do wynajdywania błędów w bibliotece zdjęć. Takie błędy zdarzają się gdy zawartość biblioteki była zmieniana poza iPhoto, oraz wtedy gdy przy kolejnych importach opcja importu zdjęć do biblioteki raz była włączona, a drugim razem wyłączona. Jak tak zrobiłem i ciężko tego żałuje.

Skrypt przy okazji wykorzystam do zbudowania pełnego zestawu zdjęć z biblioteki, potem wszystko usunę i zbuduję jeszcze raz ale już z konsekwentnie włączonym importem.

Zastanawiam się jeszcze tylko czy już teraz nie zdecydować się na podział na kilka niezależnych bibliotek np. za pomocą iPhoto Buddy.

Skrypt napisałem w Bashu, a odpala go plugin ScriptExporter. Bash to ohyda, nienawidzę tego gówna. Nadaje się, owszem do krótkich, jednolinijkowych zaklęć, przy dłuższych rzeczach robionych od czasu do czasu, jest makabryczny.

Skrypt to PRYMITYW ale robi swoje. Zdjęć nie kopiuję, bo po co?, tylko linkuję (niech żyje Unix!). Na koniec można podpiąć np. dysk USB i skopiować nań oryginały.

Uwaga! iPhoto potrafi eksportować jedynie albumy, eventy ignoruje, zatem przed pełnym eksportem należy żmudnie porobić albumy dla wszystkich posiadanych zdjęć.

Anyway, poniżej wypociny.

Skrypty są dwa, jeden do trybu Preflight, drugi do PerItem, Postflight nie jest wykorzystywany.

Preflight jest taki:

#!/bin/sh
DIR="/Users/paczor/Desktop/ImageLinks"
ZNAKI=", . \ / + :"
if ! [ -d ${DIR} ] ; then
    mkdir $DIR
fi
# iPAlbumCount - ile albumów
for (( i=0 ; i < iPAlbumCount ; i++ )) ; do
    ALBUM_x=iPAlbumName_$i
    eval ALBUM=\$$ALBUM_x
    :literal:`ALBUM=`echo "$ALBUM" tr " " "\_"\
    # podejrzane znaki w nazwach albumów
    # zamieniam na podkreślenie
    for znak in $ZNAKI
    do
        :literal:`ALBUMTEMP=`echo "$ALBUM" tr "$znak" "\_"\
        ALBUM="$ALBUMTEMP"
    done
    # usuwam zbędne znaki i ciąg "_Album"
    :literal:`ALBUM=`echo "$ALBUM" sed -e 's/\\!//'\
    :literal:`ALBUM=`echo "$ALBUM" sed -e 's/\_\_/\_/'\
    :literal:`ALBUM=`echo "$ALBUM" sed -e 's/\_Album$//'\
    ALBUMPATH="$DIR/$ALBUM"
    if ! [ -d ${ALBUMPATH} ] ; then
        mkdir "$ALBUMPATH"
    fi
done

PerItem jest taki:

#!/bin/sh
DIR="/Users/paczor/Desktop/ImageLinks"
ZNAKI=", . \ / + :"
for i in $iPAlbumsOfImage
do
    ALBUM_x=iPAlbumName_$i
    eval ALBUM=\$$ALBUM_x
    :literal:`ALBUM=`echo "$ALBUM" tr " " "\_"\
    for znak in $ZNAKI
    do
        :literal:`ALBUMTEMP=`echo "$ALBUM" tr "$znak" "\_"\
        ALBUM="$ALBUMTEMP"
    done
    :literal:`ALBUM=`echo "$ALBUM" sed -e 's/\\!//'\
    :literal:`ALBUM=`echo "$ALBUM" sed -e 's/\_\_/\_/'\
    :literal:`ALBUM=`echo "$ALBUM" sed -e 's/\_Album$//'\
    ALBUMPATH="$DIR/$ALBUM"
    ln -s "$iPImageSourcePath" "$ALBUMPATH"
done

Testy wykazały, że przy dużej ilości zdjęć iPhoto się zawiesza w trakcie użycia powyższych skryptów. Zachodzi pytanie: w czym problem? Może system plików? Może któreś pliki mają zbyt wydziwione nazwy?