myconfigfiles/.scripts/removeAcc.sh

154 lines
5.5 KiB
Bash
Executable file

#!/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 <r4ghn4r0k@gmail.com>
#
# 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_utf8.sh >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_iso8859.sh >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