Conversion du latin9 vers l’utf8
A priori ce devrait être la dernière migration de ce genre, et c’est tant mieux car c’est une vraie plaie : tous les accents dans les noms de fichiers et dans les fichiers eux-mêmes, massacrés ! Voilà de quoi y remédier.
Installation d’Utrac, Universal Text Recognizer and Converter
Pour commencer, rendez-vous sur le site d’Utrac pour le télécharger et l’installer (make puis make install en root).
Les noms de fichiers
Pour les noms de fichiers, créez ce script :
for I in `ls -A`
do
nom=`basename $I`
nnom=`echo $nom | utrac` # Convertir en UTF8
if [ "$nom" != "$nnom" ] # Renomme seulement si nécessaire
then
mv $nom $nnom
fi
if test -d "$nnom" # Si c'est un répertoire, on descend
then
cd $nnom
latin2utf
cd ..
fi
done
Noms de fichiers et leur contenu
Si on veut convertir aussi le contenu des fichiers :
for I in `ls -A`
do
nom=`basename $I`
nnom=`echo $nom | utrac` # Convertir en UTF8
if [ "$nom" != "$nnom" ] # Renomme seulement si nécessaire
then
mv $nom $nnom
fi
if test -d "$nnom" # Si c'est un répertoire, on descend
then
cd $nnom
latin2utf-contenu
cd ..
fi
if [ -f "$nnom" ] # Si c'est un fichier, on convertit...
then
test=`utrac $nnom >/dev/null 2>/dev/null ; echo $?`
if [ $test = "0" ] # ...si utrac peut convertir
then
utrac $nnom > tampon
mv tampon $nnom
rm tampon
fi
fi
done
Pour quelques fichiers ça ne marche pas, j’utilise alors recode :
% recode latin9..utf8 FICHIER
Casse et capitalisation
Tant qu’on y est, voilà un script qui capitalise la première lettre des noms de fichiers, qui passe les répertoires en minuscules et qui enlève le bit d’exécution pour les fichiers. Ce dernier est désagréable quand on utilise l’option color de ls.
#!/bin/bash
for I in `ls -A`
do
if test -d "$I" # Si c'est un répertoire, on descend
then
chmod 755 $I
cd $I
casse
pwd
cd ..
nom=`basename $I` # On passe en minuscules
nnom=`echo $I | tr 'A-Z' 'a-z'`
if [ "$nom" != "$nnom" ] # Renomme seulement si nécessaire
then
mv $nom $nnom
fi
else
chmod 644 $I
if file $I |grep executable >/dev/null
then
chmod 755 $I
fi
nom=`basename $I` # On capitalise
nnom=`echo -n ${I:0:1} |tr 'a-z' 'A-Z' ; echo ${I:1} | tr 'A-Z' 'a-z'`
if [ "$nom" != "$nnom" ] # Renomme seulement si nécessaire
then
mv $nom $nnom
fi
fi
done