Passer de l'Iso-latin9 à l'Utf8
Par Aurélien, vendredi 10 novembre 2006 à 23:25 :: Linux :: #32 :: rss
A priori ce devrait être la dernière migration de ce genre, et c'est tant mieux ça 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 kiné >/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 des les noms de fichiers, passe les répertoires en minuscules et définit des droits corrects pour les fichiers.
#!/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
Commentaires
Aucun commentaire pour le moment.
Ajouter un commentaire
Les commentaires pour ce billet sont fermés.