mercredi, décembre 13, 2017
Nom d'utilisateur : Mot de passe :
Home > Scripts Bash > Shell quickies > Convertir des fichiers UTF-8 en ISO-8859-1
[NEWS]
Envoyé par unreal
Tout admin sera confronté un jour à un embêtant problème de mélange de charsets dans des documents texte sur le disque. Comme il n'est pas très pratique de convertir chaque fichier à la main, nous allons utiliser iconv pour convertir de façon automatisée tous les fichiers vers l'encodage voulu (ici ISO-8859-1 ou Latin1). Le script prend en paramètre le nom du dossier contenant les fichiers à convertir, et il est possible de spécifier une liste d'extensions. Si un fichier est déjà au bon format, il ne sera pas converti.

#!/bin/bash

CONVPATH="$1"

EXTENSIONS=".php .txt"

if [ ! "$CONVPATH" ]; then
        echo "Usage: $0 <path>"
        exit
fi

echo "Converting from $CONVPATH..."

cd "$CONVPATH"

for ONESEARCH in $EXTENSIONS; do
        FILELIST="$FILELIST`echo ; find . -type f -name \"*$ONESEARCH\" | sed 's/ /@@@@/g'`"
done

for ONEFILE in $FILELIST; do
        ONEFILE_=`echo -n $ONEFILE | sed 's/@@@@/ /g'`
        iconv --from-code=UTF-8 --to-code=ISO-8859-1 "$ONEFILE_" > "$ONEFILE_.1" 2>/dev/null
        RV=$?
        if [ $RV -ne 0 ]; then
                echo "Error converting $ONEFILE_ ... rolling back."
                rm -f "$ONEFILE_.1"
        else
                mv "$ONEFILE_.1" "$ONEFILE_"
        fi
done


Posté le 05/11/10 à 00:20