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.
Pour commencer, rendez-vous sur le site d’Utrac pour le télécharger et l’installer (make puis make install en root).
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
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
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