#! /bin/sh
# nat2lex : renomme des fichiers de l'ordre naturel vers l'ordre lexicographique
# (1.jpg -> 001.jpg ... 10.jpg -> 010.jpg...)
# Matthias Meusburger (http://www.meusburger.net/matthias)
# v0.2
# Mars 2005
# Script sous licence GPL

# Affiche l'usage
usage() {
	echo "renomme des fichiers de l'ordre naturel vers l'ordre lexicographique"
	echo "Usage : `basename $0` [-p prefixe_a_ajouter -r repertoire_a_traiter -s suffixe_a_ajouter -t taille_des_nombres -e extension_a_traiter ]";
	echo "Exemple : `basename $0` -t 3 -p thumb_ -e JPG";  
	exit -1;
}

# Définition des paramètres par défaut
prefixe="";
repertoire=".";
suffixe="";
taille='4';
extensions="jpg";

# Récupération des paramètres : 
while getopts p:r:s:t:e:h option ; do
case $option in
	p) prefixe=$OPTARG;;
	r) repertoire=$OPTARG;;
	s) suffixe=$OPTARG;;
	t) taille=$OPTARG;;
	e) extensions=$OPTARG;;
	h) usage;;
esac
done;

# Nombre d'images traitees
noImg=0;

# On se rend dans le répertoire souhaité
if [ -d $repertoire ] ; then
	cd $repertoire;
	if [ $? -eq 0 ] ; then
		echo "J'entre dans" `pwd`;
	else 
		echo "Impossible d'entrer dans $repertoire";
		exit -1;
	fi
else
	echo $repertoire : "Le répertoire n'existe pas";
	exit -1;
fi

# On normalise les noms de fichiers
echo 'Normalisation des noms de fichier...';
for files in *.$extensions; do
                # On remplace les espaces par des sous-tirets et on met en minuscules
                mv -v "$files" `echo $files | tr ' ' '_' | tr '[A-Z]' '[a-z]'` 2>/dev/null ;
done

# On met l'extension en minscules (puisqu'on a mis les noms de fichiers en minuscules)
extensions=$(echo $extensions | tr '[A-Z]' '[a-z]');

# On parcours les noms de fichiers dans l'ordre naturel
echo "Renommage dans l'ordre lexicographique...";
for i in $(ls --sort=version *.$extensions); do 
	noImg=`expr $noImg + 1`;
	# On renomme le nom de fichier sous la forme : 
	# prefixe suivi de nombre sur $taille chiffres suivi de suffixe suivi de l'extension du fichier d'origine
	mv -v $i  ${prefixe}$(printf %0${taille}g $noImg)${suffixe}.${i##*.}
done

echo "$noImg fichiers(s) traité(s)";

