#!/bin/sh if [ $# -lt 2 ] ; then echo "usage: renum ... " 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 "httpser: 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