#!/bin/bash # Copyright (C) 13/12/2013 Gregory Trolliet # Permission is granted to copy, distribute and/or modify this document # under the terms of the GNU Free Documentation License, Version 1.3 # or any later version published by the Free Software Foundation; # with no Invariant Sections, no Front-Cover Texts, and no Back-Cover # Texts. A copy of the license is included in the section entitled ``GNU # Free Documentation License''. # # Created: 11/01/2009 Thomas 134 # Modified: # -24/03/2009 Thomas 134 # -13/12/2013 Gregory Trolliet # # Script permettant de renommer des fichiers et dossiers en remplacant une liste # de caractères #### DEUX REMARQUES IMPORTANTES #### # Attention, pour virer les mauvais caractères, ce script doit pouvoir les # lires ! # Pas d'autre solutions trouvées à l'heure actuelle. # Donc il faut paramètrer les "locales" pour lire le format iso # Dans Mandriva il faut aller dans le centre de controle > Système > Gérer les # paramètre # locaux de votre système > Avancé > Compatibilité encodage ancien (non UTF8) # Attention, pour fonctionner correctement, ce script doit être encodé de la # même façon que les caractères cibles ! # Il est normalement distribué en UTF8, qui est l'encodage des distributions # linux récentes. # Cependant, le but de ce fichier est de supprimer les caractères accentués # dans les anciens encodages. # Il faut donc le convertir dans l'encodage recherché avec la commande # suivante : # $ iconv -f utf-8 -t iso-8859-1 accent_iso8859.sh # Ne pas oublier après de le rendre exécutable ! # Pour le remettre en UTF8 (ben oui pour virer les accents même ceux qui # sont bien encodés) : # $ iconv -f iso-8859-1 -t utf-8 accent_utf8.sh # Pour connaitre l'encodage d'un fichier avec caractètre accentué (ou de # celui ci avant exécution) : # $ file -i FICHIER.TXT #### DECLARATION VARIABLES #### # Liste des caractères à remplacer ACC=àâäåçéèêëîïíìôöùüÂÀÄÇÉÈÊËÎÏÔÖÙÜ~#: # Liste des caractères remplaçants RMP=aaaaceeeeiiiioouuAAACEEEEIIOOUU___ # Initialisation d'un compteur COMPT=0 # Initialisation d'une variable END=1 # Création de la variable TEMP qui prend la valeur d'une commande (` `) # permettant de créer un fichier temporaire « unique » dans le # répertoire /tmp (mktemp) TEMP=`mktemp` #### CREATION FONCTIONS #### # Création d'une fonction (Confirmation) qui demande une confirmation au clavier Confirmation () { echo CONF="x" while [ `echo $CONF | sed 's/^[oOnNqQ]\?$/ok/'` != "ok" ] do echo "Etes vous d'accord pour continuer (O/n) ?" read CONF done # Attend la saisie d'un paramètre (read) qui sera enregistré dans une variable # (nommée CONF) # Teste si la réponse est différente de o et abandonne l'exécution dans ce cas case $CONF in "o"|"O"|"" ) ;; * ) echo "Exécution abandonné." exit 0 ;; esac } # Création d'une fonction (Remplacer) dont le paramètre est le type d'élément à # traiter : d pour dossier et f pour fichier Remplacer () { # Cherche (find) dans le répertoire à parcourir ($REP) tous les fichiers ou # dossier (-type $1) # dont le nom (-name) contient un des caractères à remplacer (*[$ACC]*) et les # écrit (>) dans un fichier ($TEMP) find $REP -type $1 -name "*[$ACC]*" > $TEMP # Test qui fait que si Temp est vide on zappe la confirmation et on passe un # paramètre (END=0) à la fonction plus bas pour arréter de boucler sur # les dossiers if [ -n "$(cat $TEMP)" ] then # Renvoi la liste et demande confirmation de l'exécution du remplacement echo "Liste des éléments à traiter :" cat $TEMP # Demande de confirmation (appel de la fonction Confirmation) Confirmation # Prend le fichier donné en argument (< $TEMP) et lit (read) toutes les # lignes (i) tant qu'il y en a (while) # Pour chaque ligne fait l'action (do) de renommer (mv) en mode interactif # et verbeux (-iv) et renomme (et non déplace) les dossiers (T) # Le fichier de départ ("$i") est renommé en remplaçant (sed) les # caractères contenus dans la liste (ACC) par ceux de la seconde liste (RMP) while read i ; do #cp -ivR "$i" "$i"_acc134\/" # sauvegarde des fichiers ?? mv -ivT "$i" "$(echo $i | sed 'y/'$ACC'/'$RMP'/')" let "COMPT = $COMPT + 1" done < $TEMP # Avant du supprimer Temp, faire un fichier de log qui conserve en # mémoire les changements effectués et leur date # Supprime (rm) le fichier temporaire créé (TEMP) rm $TEMP else END=0 fi } #### MESSAGES DE DEBUT DU SCRIPT #### # Message d'explication et rappel des paramètres echo echo "Cette commande permet de renommer des fichiers et dossiers en remplacant " echo "une liste de caractères." # Le répertoire est passé en paramètre REP=$1 # Demande de confirmation (appel de la fonction Confirmation) Confirmation #### EXECUTION DES REMPLACEMENTS #### # Traitement des dossiers dans un premier temps # Tant que (while) il reste des dossiers contenant des caractères recherchés # (varible END non vide) while [ "$END" -eq 1 ] ; do echo echo "** Traitement des dossiers **" # Appel de la fonction pour traitement des dossiers (d) Remplacer d done # Une fois les dossiers traités, vient le tour des fichiers (moins de # problème dans ce cas seul leur noms change et pas leur dossier parent) echo echo "** Traitement des fichiers **" # Appel de la fonction pour traitement des fichiers (f) Remplacer f # Message de fin indiquant le nombre de remplacements echo "$COMPT remplacement(s) effectué(é)." # Sortie du script exit 0