[Shell] Charset Konvertieren {} 2 UTF-8 mit iconv


F0rris

Mitglied
Hallo zusammen,

ich bin grade dabei auf meine Linux Server etwas aufzuräumen, Unteranderem habe ich verschiedene Charsset in in meinem webverzeichnis entdeckt.

Mein Grundgedanke war mit folgenden Befehlen in der sh zu arbeiten: find, awk, file, iconv.

Code:
 find . -regex '.*\.php' -exec file {} --mime-encoding \; | awk -F: '{iconv -f $2 -t utf-8 -o $1.new $1 }'

Mit find . -regex '.*\.php' Suche ich nur nach PHP-Dateien, um fälschliches überschreiben von Grafiken zu verhindern. Im Zweiten Durchlauf werde ich nur noch nach html Suchen. Der Anhängsel find . -regex '.*\.php' -exec file {} --mime-encoding \; sorgt für die Ausgabe des Dateinamens sowie der Charset der Datei, in meinem Fall iso-8859-1 und us-ascii.

Die Ausgabe von find übergebe ich an file. Hierfür wird der hinhalt {} von find gefüllt.

Momentan sieht der Rückgabewert wie folgt aus:
Code:
root@gr:/var/www/test# find . -regex '.*\.php' -exec file {} --mime-encoding \;
./index.php: iso-8859-1
./config.php: us-ascii
[...]

Nun gehts weiter mit awk -F: '{}'. Hier wird die ausgabe zerteil, in 2 Variablen, $1(= Dateiname) $2(=Charset iso-8859-1). Mit dem Parameter -F: verhinde ich, dass nach Variablen ein Doppelpunkt kommt. Nun kommt das eigentliche Problem, bei der weitergabe an iconv.

Laut #man iconv steht -f from_charset -t to_charset -o output_file input_file

wenn ich es nun Händisch eingebe z. B.
Code:
root@gr:/var/www/test#iconv -f  iso-8859-1 -t utf-8 -o ./newsletter.php.new  ./newsletter.php
Wird keine ausgabe erzeugt jedoch die Datei angelegt.

Nun zu meiner eigentlichen Frage:

Weiß vielleicht jemand weiter, warum bei der übergabe von awk an iconv ein Fehler auftritt?

Greez F0rris
 
Zuletzt bearbeitet:

deepthroat

Erfahrenes Mitglied
Hi.

Bitte poste auch immer die Fehlermeldung.

iconv ist kein AWK Befehl.

Du könntest zB. den system() Befehl von AWK verwenden.

Gruß
 

Neue Beiträge