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
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