#!/bin/bash # http://nicofo.tuxfamily.org # 21/10/06 : v1 : version de base - photos uniquement (renamePhotos) # 10/12/06 : v2 : tout type de fichier (renomme) # 17/03/07 : v3 : ajout option --comment # 30/04/07 : v4 : ajout option --addComment|-a # 07/09/07 : v5 : ajout addComment sur une seule photo # Arguments : si non donné ==> uniquement les photos sont traitées # sinon : uniquement les fichiers donnés en arguments sont traités # (-> ex. : renomme *.txt) ############# TRAITEMENT DES OPTIONS ############# if [ "$1" = "--help" ] || [ "$1" = "-h" ] ; then echo "Usage : $(basename $0) [-c|--chronologique] [-n|--nospace] [--comment] [files]" echo " $(basename $0) -a|--addComment" echo echo " -c|--chronologique ==> tri CHRONOLOGIQUE" echo " par défaut ==> tri ALPHABÉTIQUE" echo " -n|--nospace : n'ajoute pas d'espace dans le nom des fichiers" echo -e " --comment : tient compte d'un comment dans le nom du fichier lors\n\t\tdu renommage" echo " si pas de fichiers donnés ==> renomme uniquement les photos" echo " sinon : renomme les fichiers donnés" echo " ex. : $(basename $0) *.txt" echo echo " -a|--addComment : ajoute un commentaire" exit fi if [ "$1" = "--addComment" ] || [ "$1" = "-a" ] ; then read -p "Nombre de départ : " begin read -p "Nombre de fin : " end if ! ([ ${#begin} -eq ${#end} ] && [ "$begin" -le "$end" ]); then echo "Erreur : mauvaises entrées !" exit fi read -p "Commentaire : " comment echo #cas particulier si $begin = $end if [ $begin -eq $end ]; then SEQ=$end #ex : 09 else SEQ="{$(seq -s , -f %0${#end}g $begin $end)}" #ex : {09,10,11} fi #http://forums.fedora-fr.org/viewtopic.php?pid=156056#p156056 #REM : À TESTER AUSSI : [[...]] au lieu de 'eval' #(voir http://forums.fedora-fr.org/viewtopic.php?pid=159671#p159671) for i in 1 2 ; do #eval ls \*\\ \{$(seq -s , -f %0${#end}g $begin $end)\}.jpg|while read file ; do eval ls \*\\ $SEQ.jpg|while read file ; do nom=${file:0:$((${#file}-4))} #retirer l'extension if [ $i -eq 1 ] ; then echo -e "$file\t ==> $nom $comment.jpg" else mv -i "$file" "$nom $comment.jpg" fi done if [ $i -eq 1 ] ; then echo read -p "Vous confirmez [O/n] ? " res if [ "$res" == "n" ] || [ "$res" == 'N' ] ;then break fi fi done exit fi optionLS="" if [ "$1" = "--chronologique" ] || [ "$1" = "-c" ] ; then optionLS="-tr" shift fi if [ "$1" = "--nospace" ] || [ "$1" = "-n" ] ; then espace="" espaceComment="_" shift else espace=" " espaceComment=" " fi if [ "$1" = "--chronologique" ] || [ "$1" = "-c" ] ; then optionLS="-tr" shift fi if [ "$1" = "--comment" ] ; then COMMENT=1 shift fi ############# TYPE ET NOMBRE DE FICHIERS ############# if [ $# -eq 0 ] ; then #Photos uniquement type="photos" motif="[jJmM][pP][gG]" #par défaut : photos et vidéos set *.$motif nombre=$(ls |grep "\.$motif$" -c) else type="fichiers" nombre=0 for file in "$@" ; do if [ -f "$file" ] ; then #si c'est un fichier ordinaire nombre=$(($nombre+1)) else if ! [ -d "$file" ] ; then echo "ce fichier n'existe pas : $file" fi fi done fi if [ $nombre -eq 0 ] ; then echo "Aucun fichier trouvé." exit fi n_digit=$(expr length $nombre) n=0 #n° fichier nAffich=0 #n° pour affichage uniquement read -p "$nombre $type à renommer. Nom des $type : " titre ############# RENOMMAGE ############# ls -1 $optionLS -d "$@"|while read file #tri par date (-t) croissant(-r) #for file in "$@" #tri par nom fichier do if ! [ -f "$file" ] ; then continue fi ext=${file##*.} if [ "$ext" = "$file" ] ; then #pas d'extension ext="" else ext=".$ext" fi if [ $type = "photos" ] ; then ext=`echo $ext | tr A-Z a-z` #extension du fichier en minuscules fi n=$(($n+1)) nAffich=$(($nAffich+1)) #traitement des diaporamas ($file de la forme hpim0045_5.jpg) beginDiap=$(expr index "$file" _) if [ $beginDiap -ne 0 ] && [ "${file:0:4}" == "hpim" ] && [ $type = "photos" ] ; then endDiap=$(expr index "$file" .) numDiap=${file:$beginDiap:$(($endDiap-$beginDiap-1))} #position (comptée à partir de 0):longueur ajout="_$numDiap" if [ $numDiap -ne 1 ]; then n=$((n-1)); fi else ajout="" fi #fin traitement des diaporamas n0=$(printf %.${n_digit}d $n) #$n précédé de 0 nAffich0=$(printf %.${n_digit}d $nAffich) #$nAffich précédé de 0 ############# SI NOM FICHIER AVEC COMMENTAIRES ############# #ajout d'un éventuel commentaire dans le nom de la photo #lorsque le nom est du type 'noël 012 Farnières.jpg' ==> 'Farnières' #comFile=${file#* [0-9]* } #supprime le préfixe (va pas bien si chiffre avant) #if [ "$comFile" == "$file" ] ; then #y'a pas de commentaires if [ $type = "photos" ] && [ -n "$COMMENT" ] ; then index=$(expr "$file" : ".* [0-9]* .") if [ $index -eq 0 ] ; then comFile="" else comFile=$(expr substr "$file" $index $(expr length "$file")) comFile=${comFile%.jpg} #supprime le suffixe comFile="$espaceComment$comFile" fi fi ############# SI NOM FICHIER AVEC COMMENTAIRES ############# nom="${titre}${espace}${n0}${ajout}$comFile${ext}" if [ ! "$file" = "$nom" ] ; then mv -i "$file" "$nom" #-i ==> prévient si overwrite un fichier echo -e "[$nAffich0/$nombre] $file\t==>\t$nom" else echo -e "[$nAffich0/$nombre] $file\t==>\t(inchangé)" fi done exit ############# photos de diaporama du HP : hrXX.....jpg ==> hpim...._X.jpg ############# oldN=0 for file in *; do n=${file:3:1} #OU n=$(expr substr "$file" 4 1) if [ $n -eq $oldN ]; then seq=$(($seq+1)) else seq=1 fi oldN=$n numPhoto=${file:4:4} #OU =$(expr substr "$file" 5 4) echo "$file ==> hpim${numPhoto}_${seq}.jpg" mv $file hpim${numPhoto}_${seq}.jpg done