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
, 10 novembre 2006. Catégorie: Système.

À propos de l’auteur, Almic