#!/bin/bash if [ $# -lt 2 ] then echo "Usage: $0 output inputs*" exit 1 fi set -e OUTPUT="$1" shift SIZE=256 TARGET="$(mktemp -d)" TOTAL=$# NPROCS="$(nproc)" running_jobs() { jobs="\\j" echo -n "${jobs@P}" } waitjob() { wait -n || echo failed echo -en "\rThumbnail $completed of $TOTAL ...\e[K" let completed+=1 } let completed=1 for INPUT in "$@" do if [ $(running_jobs) -ge $NPROCS ] then waitjob fi convert -resize "${SIZE}x${SIZE}" "$INPUT" "$TARGET/${INPUT//\//-}" & done while [ $(running_jobs) -gt 0 ] do waitjob done echo echo Creating "$OUTPUT" montage "$TARGET"/* "$OUTPUT"