Wie kann ich mehrere Dateien mithilfe von * nix-Befehlszeilentools in UTF-8-Codierung konvertieren? [Duplikat]

Antworten:

56

iconv konvertiert zwischen vielen Zeichenkodierungen. Fügen Sie also ein wenig Bash-Magie hinzu und wir können schreiben

for file in *.txt; do
    iconv -f ascii -t utf-8 "$file" -o "${file%.txt}.utf8.txt"
done

Dies wird iconv -f ascii -t utf-8für jede Datei ausgeführt, die auf endet .txt, und die neu codierte Datei wird an eine Datei mit demselben Namen gesendet , die jedoch auf .utf8.txtanstatt auf endet .txt.

Es ist nicht so, als würde dies tatsächlich irgendetwas mit Ihren Dateien bewirken (da ASCII eine Teilmenge von UTF-8 ist), sondern als Antwort auf Ihre Frage, wie Sie zwischen Codierungen konvertieren können.

Vinko Vrsalovic
quelle
2
Sie sollten die Variable $ i in Anführungszeichen setzen, um Dateinamen mit Leerzeichen zu behandeln.
Richard Hoskins
Es wird Dinge tun, es wird eine Stückliste für eine hinzufügen ...
Jason
Sind Sie sicher, dass iconv eine Stückliste hinzufügt? Ich hatte den Eindruck, dass es mit UTF-8 nicht gehen würde.
Richard Hoskins
5
Ich habe dies gerade mit iconv (GNU libiconv 1.11) getestet und es wurde keine Stückliste hinzugefügt. Ich verstehe, dass iconv nur dann eine Stückliste hinzufügt, wenn eine in der Eingabe vorhanden ist, was in ASCII nicht der Fall wäre. Stücklisten sind problematisch und bei UTF-8 nicht erforderlich.
Richard Hoskins
2
Wenn Ihre Version von iconv den Parameter -o nicht unterstützt, können Sie ihn direkt durch >> ersetzen, um die Shell-Umleitung zu verwenden.
Rob