#!/bin/bash # sh-a-gal (shell picture gallery maker) # # wersja nie do rozpowszechniania # najnowsza wersja bedzie dostepna na stronie http://odya.net/proj/shagal/ # # TODO: # - dodac wszedzie sprawdzanie bledow # - dodac obsluge podkatalogow # - dopracowac wykorzystanie wielowatkowosci # - dorobic tryb interaktywny (pytanie o rozdzielczosci, tworzenie miniatur itp.) # - dorobic polska/angielska wersje plus polskie znaki na wygenerowanych stronach www # fname="index.html" opisfile="opis.txt" res="800x600" # WIDTHxHEIGHT resthumb="200x150" # WIDTHxHEIGHT cssurl="http://odya.net/ico/album.css" # full URL, absolute or relative, i.e. http://some/place.css, /some/place.css or some/place.css info_o_archiwum=0 # dodaje informacje i link o archiwum ze wszystkimi plikami tworz_archiwum=0 # tworzy archiwum ze wszystkimi zdjeciami tworz_miniatury=1 # tworzy miniatury (w katalogu /thumbs) tworz_pomniejszone=1 # tworzy pomniejszone zdjecia (w katalogu /medium) quality=85 # jakosc pomniejszonych zdjec (w procentach) verbose=0 # gadatliwosc kumaj_filmy=0 # obsluga filmow (pokazuja sie na liscie) kumaj_opis=1 # obsluga plikow z opisami galerii cam_logo="/bin/stiwo/cam.png" # nazwa pliku z miniatura pokazywana na filmach #clear # -------------------------- lepiej nie zmieniaj nic pod ta linia ----------- C_GREEN="\033[1;32;40m" C_CLEAR="\033[1;0m" C_RED="\033[1;31;40m" C_MAG="\033[1;36;40m" C_PINK="\033[1;35;40m" C_GREY="\033[1;30;40m" C_HWHITE="\033[1;37;40m" [ "$1" == "-i" ] \ && { echo -e "${C_HWHITE}INFO:Tryb interaktywny...${C_CLEAR}" for a in tworz_pomniejszone quality verbose kumaj_filmy kumaj_opis cam_logo opisfile fname res resthumb info_o_archiwum tworz_archiwum tworz_miniatury ; do echo -en "Zmienna ${C_HWHITE}$a${C_CLEAR}, domyslna wartosc: ${C_HWHITE}${!a}${C_CLEAR}:\t" read a done } [ "$1" == "-r" ] \ && { echo -e "${C_HWHITE}INFO: Reczne obracanie zdjec${C_CLEAR}" [ $# -ne 3 ] && ( echo -e "${C_RED}ERR: Niepoprawna ilosc parametrow\nSkladania:\n\t$0 -r L/R file.jpg${C_CLEAR}"; exit; ) # echo -en "Zmienna ${C_HWHITE}$a${C_CLEAR}, domyslna wartosc: ${C_HWHITE}${!a}${C_CLE case $2 in [lL]) deg=270;; [rR]) deg=90;; *) echo -e "${C_RED}ERR: Niepoprawny kierunek obracania - R/L${C_CLEAR}"; exit ;; esac nazwa="$3" orig="`echo $nazwa|sed 's/.jpg/_orig.jpg/'`" while [ -f "$orig" ]; do echo -e "${C_MAG}Plik $orig istnieje, dodaje \"_orig\" do nazwy.${C_CLEAR}" orig="`echo $orig|sed 's/.jpg/_orig.jpg/'`" done mv "$nazwa" "$orig" echo -e "Obracam zdjecie ${C_HWHITE}$nazwa${C_CLEAR}" convert -rotate $deg "`echo $nazwa|sed 's/.jpg/_orig.jpg/'`" "$nazwa" exit } [ "$1" == "-d" ] && \ { [ "$2" != "" ] \ && { olddir=`pwd` [ -d $2 ] && cd $2 || { echo -e "${C_RED}ERR: Wskazany katalog nie istnieje!${C_CLEAR}"; exit; } } || { echo -e "${C_RED}ERR: Niepoprawna ilosc parametrow\nSkladnia:\n\t$0 -d katalog${C_CLEAR}\n" exit } } netver=`wget -T 1 -t 1 -O- -q http://odya.net/proj/shagal/VERSION` prodname="shagal" prodver="0.3.6" prod="$prodname $prodver" produrl="http://odya.net/proj/shagal/" echo -e "${C_HWHITE}INFO:\t${prod}${C_CLEAR}" [[ -z $netver ]] && \ echo -e "INFO:\tSprawdzanie dostepnosci nowszej wersji skryptu nie powiodlo sie.\n\tPrawdopodobnie nie ma dostepu do internetu." || ( \ [[ `echo $netver|awk -F: '{print $1}'|tr -d \.` -gt `echo $prodver|tr -d \.` ]] && \ echo -e "INFO:\tDostepna jest nowsza wersja skryptu. Mozesz ja pobrac automatycznie (przelacznik -u) lub recznie,\n\tze strony $produrl" || echo -e "INFO:\t${C_HWHITE}Posiadasz najnowsza wersje skryptu.${C_CLEAR}"; ) [ "$1" == "-u" ] \ && { echo -e "${C_HWHITE}INFO: Pobieranie najnowszej wersji skryptu" urlfilename="`echo $netver|awk -F: '{print $2}'`" wget "$produrl/$urlfilename" -o tttmp [ -f "$urlfilename" ] && echo "Prawdopodobnie masz juz najnowsza wersje skryptu" || cp tttmp "$urlfilename" rm tttmp chmod +x "$urlfilename" exit } time1=`date +%s` # cpus1 - linux # cpus2 - bsd # cpus3 - solaris cpus1=`grep processor /proc/cpuinfo 2> /dev/null | wc -l ` ; cpus2=`sysctl kern.threads.virtual_cpu 2> /dev/null |awk {'print $2'}` cpus3=`[ -f /usr/sbin/psrinfo ] && /usr/sbin/psrinfo | wc -l` [[ -n $cpus1 ]] && cpus=$cpus1 ; [[ -n $cpus2 ]] && cpus=$cpus2 [[ -n $cpus3 ]] && cpus=$cpus3 #naglowek=`echo -e "
\n\n"` nagloweklista=`echo -e "\n\n"` naglowekpikczer=`echo -e "\n\n"` echo $cssurl | grep -q ^/ || echo $cssurl | grep -q "tp://" || naglowekpikczer=`echo -e "\n\n"` data=`date +"%Y/%m/%d %T"` resx=`echo $res|awk -Fx '{print $1}'` ; resy=`echo $res|awk -Fx '{print $2}'` resthumbx=`echo $resthumb|awk -Fx '{print $1}'` ; resthumby=`echo $resthumb|awk -Fx '{print $2}'` which jhead 1> /dev/null \ || { echo -e "${C_RED}ERR:\tNie znaleziono programu JHEAD wykorzystywanego do pozyskiwania danych EXIF.${C_CLEAR} Mozna go pobrac ze strony http://www.sentex.net/~mwandel/jhead/"; exit 1; } [ -d thumbs ] || mkdir thumbs ; [ -d medium ] || mkdir medium which convert 1> /dev/null \ || { echo -e "${C_RED}ERR:\tNie znaleziono programu CONVERT. Konczenie pracy...${C_CLEAR}"; exit 1; } [ $kumaj_filmy -ne 0 ] && { which composite 2> /dev/null \ || { echo -e "${C_RED}ERR:\tNie znaleziono programu COMPOSITE. Konczenie pracy...${C_CLEAR}"; exit 1; } } [ $kumaj_filmy -ne 0 ] && { [ -f mediaplayer/mediaplayer.swf ] || { echo -e "${C_RED}ERR:\tNie znaleziono pliku mediaplayer.swf w katalogu ./mediaplayer/\n\tUmiesc odpowiedni plik w biezacym katalogu\n\tUmiesc odpowiedni plik lub wylacz obsluge filmow. Konczenie pracy...${C_CLEAR}"; exit 1; } } [ $kumaj_filmy -ne 0 ] && { [ -f mediaplayer/swfobject.js ] || { echo -e "${C_RED}ERR:\tNie znaleziono pliku swfobject.js w katalogu ./mediaplayer/\n\tUmiesc odpowiedni plik lub wylacz obsluge filmow. Konczenie pracy...${C_CLEAR}"; exit 1; } } [ -d thumbs ] || mkdir thumbs ; [ -d medium ] || mkdir medium cnt=0 for ren in `find . -maxdepth 1 -type f -iname "*.jpg" -o -iname "*.jpeg"|sed 's/ /___spAce___/g'`; do toren=`echo $ren|sed 's/___spAce___/ /g'` echo "$toren" | grep -q ".jpg$" || \ { newname="`echo $toren|sed 's/[jJ][pP].*[gG]$/jpg/'`" [ -f "$newname" ] && newname="`echo $newname|sed 's/.jpg/_.jpg/'`" mv "$toren" "`echo $newname|sed 's/___spAce___/ /g'`" } done [ $kumaj_filmy -ne 0 ] && { \ for ren in `find . -maxdepth 1 -type f -iname "*.avi"|sed 's/ /___spAce___/g'`; do toren=`echo $ren|sed 's/___spAce___/ /g'` echo "$toren" | grep -q ".avi$" || \ { newname="`echo $toren|sed 's/[aA][vV][iI]$/avi/'`" [ -f $newname ] && newname="`echo $newname|sed 's/.avi/_.avi/'`" mv "$toren" "$newname" } done } echo -ne "INFO:\tWykryto procesorow: $cpus"; [ $cpus -gt 1 ] || echo " (przetwarzanie bez pracy w tle)" && echo " (przetwarzanie z praca w tle)" [ $info_o_archiwum -ne 0 ] && echo -e "OPCJE:\tZ informacja (linkiem) o archiwum" || echo -e "OPCJE:\tBez informacji (linku) o archiwum" [ $tworz_archiwum -ne 0 ] && echo -e "OPCJE:\tTworzenie archiwum" || echo -e "OPCJE:\tArchiwum nie zostanie utworzone" [ $tworz_miniatury -ne 0 ] && echo -e "OPCJE:\tTworzenie miniatur" || echo -e "OPCJE:\tMiniatury nie zostana utworzone" [ $tworz_pomniejszone -ne 0 ] && echo -e "OPCJE:\tTworzenie pomniejszonych zdjec" || echo -e "OPCJE:\tZdjecia pomniejszone nie zostana utworzone" echo $nagloweklista > $fname # ------------------------------------------------------ pwd=`pwd`; nazwatar="`basename $pwd`.tar"; echo "-----------------------------------------------------------------------" cnt=0; for a in `find . -maxdepth 1 -name "*.jpg" -o -name "*.avi" -type f|grep -v "_orig.jpg"|sort|sed 's/ /___spAce___/g'` ; do \ pliki[$cnt]="`echo $a|sed 's/___spAce___/ /g'`"; cnt=$(($cnt+1)); done echo "" >> $fname echo -e "| Liczba zdjec w tym albumie: ${#pliki[@]}, laczna objetosc `du -hc *.jpg *.avi 2> /dev/null | tail -n 1 | awk '{print $1}'`B" >> $fname [[ $info_o_archiwum -eq 1 ]] && { echo -e "pobierz wszystkie jako archiwum" >> $fname ; } echo -e "">>$fname; cat $opisfile >> $fname; echo "
">>$fname; } echo "/'| sed 's/: /<\/<\/font> | \ /' | sed 's/$/<\/font><\/td><\/tr>/' >> "$picfilename" echo " |
Get the Flash Player to see this pl ayer.
" >> "$picfilename" echo "Klip w wysokiej rozdzielczosciGet the Flash Player to see this pl ayer.
" >> "$picfilename" echo -e "\n\r" >> "$picfilename" wielkoscoryginalu=`du -h $nazwa|awk '{print $1}'` echo -n "Pobierz klip w formacie AVI (prawy guzik, zapisz jako...)