#!/bin/sh

if [ $# -lt 2 ] ; then
  echo "usage: renum <file1> <file2> ...  <destination file template>"
  echo "renames the source files to successively numbered files. The template must"
  echo "contain a decimal number, the number of the first file."
  exit 1
fi

template="${!#}"                 # last argument

suff="${template##*[0-9]}" # trunk excluding last non-numerical char
if [ "$suff" = "$template" ]; then
  echo "renum: error: template \`$template' contains no number"
  exit 1
fi
if [ "$suff" = "" ]; then		# special treatment for "...mp3" or similar
  trunk="${template%.*}"
  suff="${trunk##*[0-9]}${template:${#trunk}}"
fi

template="${template%$suff}"		# strip suffix
first="${template##*[^0-9]}"		# strip everything before last group of digits
trunk="${template%$first}"		# trunk = template without number and suffix
firstzeros=${first%%[1-9]*}		# leading zeros
first=${first#$firstzeros}		# number of first file without leading zeros

# debug output:
#echo template $template trunk $trunk zeros $firstzeros first $first suffix $suff

# make sure destination file names don't exist
number=$first
zeros=$firstzeros
count=$(($# - 1))
destfile=

while [ $count -gt 0 ] ; do
  destfile="$trunk$zeros$number$suff"
  if [ -e "$destfile" ] ; then
    echo "renum2: file $destfile exists"
    exit 1
  fi 
  number=$(($number + 1))
  if [ "${number:0:1}" = 1 -a "${number:1}"0 -eq 0 ]; then
    zeros=${zeros:1}
  fi
  count=$(($count-1))
done

# make sure source files exist and are regular files
count=1

while [ $count -lt $# ] ; do
  if [ ! -f "${!count}" ] ; then 
    echo "renum2: ${!count} does not exist or is no regular file"
    exit 1
  fi
  count=$(($count+1))
done

# do it
number=$first
zeros=$firstzeros
while [ $# -gt 1 ] ; do
  destfile="$trunk$zeros$number$suff"
  mv -i "$1" "$destfile"        # -i shouldn't be necessary, just in case...
  number=$(($number+1))
  if [ "${number:0:1}" = 1 -a "${number:1}"0 -eq 0 ]; then
    zeros=${zeros:1}
  fi
  shift
done

exit 0

