#!/bin/bash NUM=0 QUEUE="" MAX_NPROC=2 # default REPLACE_CMD=0 # no replacement by default USAGE="A simple wrapper for generating jpg pictures out of svg-files in parallel. Usage: `basename $0` [-h] [-i] [-j nb_jobs] command arg_list -h Shows this help -c give the path to the cfg file -i give the path of the svg files without the last / -j Set number of simultanious jobs. Default is 2 -o directory where the files should be moved to after creation. Default ist PICCREATE_OUT Examples: `basename $0` -i file -c config `basename $0` -j 3 -i file -c config" function queue { QUEUE="$QUEUE $1" NUM=$(($NUM+1)) } function regeneratequeue { OLDREQUEUE=$QUEUE QUEUE="" NUM=0 for PID in $OLDREQUEUE do if [ -d /proc/$PID ] ; then QUEUE="$QUEUE $PID" NUM=$(($NUM+1)) fi done } function checkqueue { OLDCHQUEUE=$QUEUE for PID in $OLDCHQUEUE do if [ ! -d /proc/$PID ] ; then regeneratequeue # at least one PID has finished echo $PID break fi done } function cfg_parser { INI_FILE=$1 SECTION=$2 echo $1 echo $2 eval `sed -n -e "/^\[$SECTION\]/,/^\s*\[/{/^[^;].*\=.*/p;}" < $INI_FILE`>> trr.txt echo 'helololo' } function get_filepath { # probiere alle möglichen Kombinationen wo das file stehen könnte je # nachdem ob es mit oder ohne Endung, mit oder ohne den Komplettpfad # gegeben wurde FILENAME=$1 ENDING=$2 DEFAULT_DIR=$3 if [ -s $FILENAME ] ; then echo $FILENAME elif [ -s $FILENAME.$ENDING ] ; then echo "$FILENAME.$ENDING" elif [ -s $DEFAULT_DIR/$FILENAME ] ; then echo "$DEFAULT_DIR/$FILENAME" elif [ -s $DEFAULT_DIR/$FILENAME.$ENDING ] ; then echo "$DEFAULT_DIR/$FILENAME.$ENDING" fi return } # Funktion die auf globalen Parametern beruht. # überprüft ob alle notwendigen Angaben vorhanden sind function check_params { if [ -z "$INPUT_FILENAME" ]; then echo "please give input file with -i." exit 1 fi if [ -z "$CFG_FILENAME" ]; then echo "please give config file with -c." exit 1 fi INPUT_FILE=`get_filepath $INPUT_FILENAME 'csv' $PICCREATE_WORK` if [ ! -s $INPUT_FILE ] ; then echo "-> input filename does not exist" print "given was: -$INPUT_FILENAME-" exit 1 fi CFG_PATH=`get_filepath $CFG_FILENAME 'cfg' $PICCREATE_CFG` if [ ! -s $CFG_PATH ]; then echo "-> config file with this name does not exist." print "given was: -$CFG_FILENAME-" exit 1 fi cfg_parser $CFG_PATH "$SECTION_NAME" echo 'using width '$width echo 'using height '$height if [ -z "$width" ]; then echo "please give width=xxx in section [$SECTION_NAME] in config $CFG_FILENAME." exit 1 fi if [ -z "$height" ]; then echo "please give height=xxx in section [$SECTION_NAME] in config $CFG_FILENAME." exit 1 fi } # parse command line if [ $# -eq 0 ]; then # must be at least one arg echo "$USAGE" >&2 exit 1 fi while getopts "j:i:o:hc:" OPT; do # "j:" waits for an argument "h" doesnt case $OPT in h) echo "$USAGE" exit 0 ;; j) MAX_NPROC=$OPTARG ;; c) CFG_FILENAME=$OPTARG ;; o) OUTDIR=$OPTARG ;; i) INPUT_FILENAME=$OPTARG ;; *) echo "$USAGE" >&2; exit 1; # Default. esac done # Main program echo Using $MAX_NPROC parallel threads check_params # Starte die Generierung echo $INPUT_FILE for i in `ls $INPUT_FILE| grep .svg ` do echo $i ID=`echo "$i" | sed -e 's/;.*//g'` PIC_NAME=`echo "$i" | sed -e 's/.svg/.jpg/g'` echo PID RESIZE="${width}x${height}" SWITCHES="-density $density $INPUT_FILE/$ID -resize $RESIZE $INPUT_FILE/$PIC_NAME" CMDLINE="$CMD $SWITCHES" echo $CMDLINE (echo $ID; $CMDLINE) & PID=$! queue $PID while [ $NUM -ge $MAX_NPROC ]; do checkqueue sleep 0.5 done done wait # wait for all processes to finish before exit if [ ! -z $OUTDIR ]; then echo -n moving to $OUTDIR if [ ! -d $OUTDIR ]; then echo creating directory $OUTDIR mkdir $OUTDIR fi mv $PICCREATE_OUT/*.jpg $OUTDIR echo done fi # vi:set wrapmargin=0 ai showmatch ts=4 syntax=sh: