#!/usr/bin/env bash # Default values OUTPUT_DIR="" PREFIX="" N_IMAGES=0 INTERVAL=3 while [[ ! $# -eq 0 ]]; do # looping through the arguments case "$1" in --interval | -i) INTERVAL=$2 ;; --n-images | -n) N_IMAGES=$2 ;; --output-dir | -o) OUTPUT_DIR=$2 ;; --prefix | -p) # TODO: Check that if given, it is not empty PREFIX=$2 esac shift done if [[ "${OUTPUT_DIR}" != "" && "${OUTPUT_DIR: -1}" != "/" ]]; then OUTPUT_DIR="${OUTPUT_DIR}/" fi progress=0 n_images_previous=0 start_time=$( date +%s.%N ) while (( $(echo "${progress} < 100" | bc -l) )); do end_time=$( date +%s.%N ) n_images_created="$(ls -1 ${OUTPUT_DIR}${PREFIX}*.png 2> /dev/null | wc -l)" runtime=$( echo "${end_time} - ${start_time}" | bc -l ) start_time=$( date +%s.%N ) # re-initialize `start_time` after `runtime` has been computed progress=$(printf '%.3f\n' $(echo "${n_images_created} / ${N_IMAGES} * 100" | bc -l)) progress_10=$(printf '%.3f\n' $(echo "${n_images_created} / ${N_IMAGES} * 10" | bc -l)) n_images_tocreate=$((N_IMAGES - n_images_created)) speed=$(printf '%.1f\n' $(echo "(${n_images_created} - ${n_images_previous}) / ${runtime}" | bc -l)) n_images_previous=${n_images_created} # re-initialize `n_images_previous` for the next loop if (( $(echo "${speed} == 0" | bc -l) )); then # to avoid division by zero continue fi etl=$(printf '%.0f\n' $(echo "${n_images_tocreate} / ${speed}" | bc -l)) etl_toprint="" n_hours=$(printf '%.0f\n' $(echo "${etl} / 3600" | bc -l)) if (( $(echo "${n_hours} >= 1" | bc -l) )); then etl_toprint="${n_hours}h " fi n_min=$(printf '%.0f\n' $(echo "scale=0; (${etl} % 3600) / 60" | bc -l)) if [[ ${n_min} -ge 1 || ${n_hours} -ge 1 ]]; then etl_toprint="${etl_toprint}${n_min}min " fi n_sec=$(printf '%.0f\n' $(echo "scale=0; ${etl} % 60" | bc -l)) etl_toprint="${etl_toprint}${n_sec}s" pct="$(printf "%.*f\n" 2 ${progress})" bar="" for (( i=1; i<=10; i++ )); do if (( $(echo "${i} <= ${progress_10}" | bc -l) )); then bar="${bar}#" else bar="${bar} " fi done bar="[${bar}]" echo -ne "${bar} ${n_images_created}/${N_IMAGES} images created (${pct}%), ETL: ${etl_toprint}, speed: ${speed} images/s\r\c" sleep ${INTERVAL} done