Forum Astuces.divers [Admin] Convertir son FS Linux ext2/ext3 iso-8859-15 au format UTF8

Posté par (page perso) .
Tags : aucun
1
31
mai
2006
Vous utilisiez une Distribution avec un encodage des noms de fichiers à la norme iso-8859-15 (Mandriva par exemple) et vous passez maintenant sur une distribution gérant les FS avec la norme UTF8 (Ubuntu, Fedora etc) et vous êtes emmerdé avec vos accents dans les noms de fichiers ?

Vite, créez le script convert.sh avec le contenu suivant :


#!/bin/bash
FROM=iso-8859-15
TO=UTF8

EXCLUDE="Ê|Ë|É|È|Â|À|Î|Ï|Ô|Ô|Û|Ù|Ç|Ñ|à|â|é|è|ê|ë|î|ï|ç|ô|ö|û|ù|ñ|°"

convert_a_directory()
{
let l=l+1
export l
echo "Conversion en cours : $(printf "%$l.${l}s") $1" >&2
cd -- "$1"
for fic in *
do
base_fic=$(basename -- "$fic")
if echo "$base_fic" | egrep -e "$EXCLUDE" > /dev/null; then
# echo "$base_fic OK" >&2
continue
fi
rename=$(echo "$base_fic" | iconv -f $FROM -t $TO)
if [ ! "$rename" = "$fic" ]; then
printf " Renommage : \n %s -> \n %s\n\n" "$base_fic" "$rename" >&2
mv "$base_fic" "$rename"
fi
if [ -d "$fic" ]; then
convert_a_directory "$fic"
fi
done
cd ..
let l=l-1
export l
}

convert_a_directory "${*:-"."}"


Rendez le exécutable :
$ chmod +x ./convert.sh

Et lancez le ensuite à l'aide de la manière suivante :
$ ./convert.sh Dev
Conversion en cours : Dev
Conversion en cours : Figure
Conversion en cours : Figure
Conversion en cours : Matrix
Conversion en cours : Matrix
Renommage :
Matrix3D - 17 d?cembre 2001.zip ->
Matrix3D - 17 décembre 2001.zip

Conversion en cours : Matrix v0.1
Conversion en cours : Figure
Conversion en cours : Matrix
Conversion en cours : Matrix v0.2
...


En principe, il est réentrant et il ne convertira pas 2 fois un fichier (si vous faîtes 2 conversions, vous faîtes une corruption sur les accents dans le nom des fichiers).

Le script s'appuie sur la présence de l'utilitaire iconv.
  • # iconv est dans la glibc (enfin dans le paquet glibc sous mandriva)

    Posté par (page perso) . Évalué à 3.

    Donc a priori c'est ultra-portable.

    Sinon vous pouvez replacer ça par :
    mv "$fic" "$(echo $fic | recode iso8859-15..u8)"
  • # Locale

    Posté par (page perso) . Évalué à 2.

    A lancer avec quelle locale ?

    Attention ca change tout !
  • # plus simple

    Posté par (page perso) . Évalué à 1.

    # apt-get/emerge/pacman convmv
    # convmv -r --nosmart --notest -f iso-8859-1 -t utf8 *
  • # Merci

    Posté par . Évalué à 1.

    Tres utile..
    • [^] # Re: Merci

      Posté par . Évalué à 1.

      Pareil

      ça m'enlève une fière chandelle du pied :)
  • # Il manque l'oe liés (½ et ¼)

    Posté par . Évalué à 1.

    La ligne
    EXCLUDE="Ê|Ë|É|È|Â|À|Î|Ï|Ô|Ô|Û|Ù|Ç|Ñ|à|â|é|è|ê|ë|î|ï|ç|ô|ö|û|ù|ñ|°"
    devrait être :
    EXCLUDE="Ê|Ë|É|È|Â|À|Î|Ï|Ô|Ô|Û|Ù|Ç|Ñ|à|â|é|è|ê|ë|î|ï|ç|ô|ö|û|ù|ñ|°|¼|½"
    '¼' est un caractère que j'utilise assez en français.

    Mes 2 sous.
  • # Et convmv ?

    Posté par . Évalué à 1.

    Plus simple qu'un script, un petit logiciel qui s'appelle convmv (dispo en paquet dans la plupart des distrib) avec la syntaxe suivante :
    # convmv -f iso-8859-15 -t UTF8 -r

    -f = from
    -t = to
    -r = récursive, pour faire les sous répertoire.
    Cette commande fait un test, ajouter --notest pour effectuer les changements.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.