dateien rekursiv von iso-8859-1 in utf-8 konvertieren

immer wieder holen einem die gleichen probleme ein. gerade windows nutzer, die keine vernuenftigen editoren benutzen, machen dem rest das leben schwer. in 95% aller faelle ist es vollkommen schnurzegal, wie man seine dateien abspeichert. ein webserver unter linux nimmts halt etwas genauer (hat er ja auch recht). das passende shirt dazu (siehe bild) gibt bei getdigital

mal so als gedaechtnisstuetze fuer mich und falls jemand auch mal so ein problem hat. ich musste dateien einer webpraesenz auf einen neuen server umziehen. das problem dabei war, dass manche schon in utf-8 abgespeichert waren und der rest in iso-8859-1. abhilfe schafft ein kleines bash scriptchen, welches man als “convert.sh” abspeichert:

#!/bin/sh
if [ `file $1|grep UTF-8|wc -l` = "0" ]; then
    # datei ist kein utf-8 -> auflisten
    echo $1 >> "kein_utf8.txt"
    # konvertieren
    iconv -f ISO-8859-1 -t UTF-8 "$1" -o "$1"_conv
    # original loeschen
    rm "$1"
    # konvertierte datei umbenennen
    mv "$1"_conv "$1"
    # falls das charset angegeben ist, dann ersetzen
    sed -i 's/charset=iso-8859-1/charset=utf-8/g' "$1"
else
    # datei ist bereits utf-8 -> auflisten
    echo $1 >> "ist_utf8.txt"
fi

sicherlich nicht das non plus ultra und noch verbesserungsfaehig, aber fuer meinen zweck hat es das getan. in der datei “kein_utf8.txt” werden die aufgelistet, die umgewandelt wurden und in der “ist_utf8.txt” nur die, die schon utf-8 encoding hatten.

diese datei ruft man dann einfach in dem verzeichnis auf, von dem aus man abwaerts die z.b. html dateien konvertieren will:

find . -name "*.html" -print | xargs -i -t ./convert.sh '{}'

09. January 2011 by sd
Categories: Uncategorized | Tags: , , | 1 comment

One Comment

  1. Aahhhh. Danke. Gibt mehrere Ansätze im Internet.. Dein Script hat direkt funktioniert… Vielen Dank!

    Marco

Leave a Reply

Required fields are marked *