#!/bin/bash
# Skrypt bulkrun uruchamiający kilka instancji zadanego programu
# w celu równoległego przetworzenia plików.

printHelp ()
{ 
  echo "Użycie: $0 -p 3 -i katalog/ -x \"uruchamiany_program/\""
  echo -e "\t-p maksymalna liczba uruchamianych jednocześnie instancji"
  echo -e "\t-i katalog zawierający pliki wymagane przez program"
  echo -e "\t-x uruchamiany program z argumentami"
  exit 1
}

while getopts "p:x:i:" opt; do
  case "$opt" in
    p ) procs="$OPTARG"    ;;
    x ) command="$OPTARG"  ;;
    i ) inputdir="$OPTARG" ;;
    ? ) printHelp          ;;
  esac
done

if [[ -z $procs ]] || [[ -z $command ]] || [[ -z $inputdir ]]
then
  echo "Błędne argumenty"
  printHelp
fi

total=$(ls $inputdir | wc -l)
files="$(ls -Sr $inputdir)"

for k in $(seq 1 $procs $total)
do
  for i in $(seq 0 $procs)
  do
    if [ $((i+k)) -gt $total ]
    then
      wait
      exit 0
    fi

    file=$(echo "$files" | sed $(expr $i + $k)"q;d")
    echo "Uruchamianie $command $inputdir/$file."
    $command "$inputdir/$file"&
  done

  wait
done
