Wenn Sie häufig Textdokumente zwischen Windows- und Linux-Systemen tauschen, passen Sie mit wenigen Kommandos auf der Shell die unterschiedlichen Zeilenenden an – dos2unix und unix2dos konvertieren mit nur einem Befehl. Sollte darüber hinaus ein Zeichensatz Ärger machen, wandeln iconv und recode den Buchstabensalat in ein leckeres und lesbares Gericht um.
Was gibt's?
Dateiendungen sind Schall und Rauch: Linux unterscheidet Dateitypen nach inhaltlichen Kriterien und nicht nach der Endung des Dateinamens. So erkennt es beispielsweise eine MP3-Datei auch als solche, wenn sie einen Namen trägt, der auf etwas ganz anderes schließen lässt. Abbildung 1 zeigt den Gnome-Dateimanager Nautilus, der sowohl die als Text getarnte MP3-Datei (im Beispiel huhn.txt) als auch die als PNG verkleidete LaTeX-Datei (brief.png) richtig identifiziert hat.
Auf der Kommandozeile hilft das Programm file dabei, die Dateitypen richtig zu erkennen (Listing 1). Das praktische Tool schaut sich Dateien ganz genau an und versucht mit verschiedenen Tests herauszufinden, um was für einen Typ es sich handelt. In der Regel ermöglichen bereits die ersten paar Bytes einer Datei die korrekte Zuordnung. Nur wenn file gar nicht fündig wird, meldet es:
$ file komischedatei komischedatei: data
$ file * brief.png: LaTeX 2e document text huhn.txt: MP3 file with ID3 version 2.3.0 tag test.txt: ISO-8859 text
Das Programm zeigt sich netterweise auch recht informativ, wenn es um Textdateien geht. Dass Text nicht gleich Text ist, zeigt die Ausgabe in Listing 2: Drei Textdateien ergeben drei verschiedene Ausgaben von file: Einmal UTF-8, einmal Windows-Zeilenenden (CRLF, siehe nächster Abschnitt) und einmal ISO-8859. Die nächsten Abschnitte stellen Programme vor, mit denen Sie diese unterschiedlichen Texte für den Austausch mit anderen Systemen fit machen.
$ file * utf8.txt: UTF-8 Unicode text win.txt: ISO-8859 text, with CRLF line terminators iso8859.txt: ISO-8859 text
Das Ende der Zeile …
… ist oft der Anfang des Ärgers, denn die verschiedenen Betriebssysteme nutzen unterschiedliche Kennzeichnungen für Zeilenenden. Die Syntax, die übrigens der Funktionsweise von Schreibmaschinen nachempfunden wurde, fällt unter Linux und Windows unterschiedlich aus: Während Linux-Systemen ein Line Feed (Zeilenvorschub, \n = "new line") ausreicht, repräsentiert unter Windows eine Kombination aus Line Feed und Carriage Return (Wagenrücklauf, \r = "return") den Umbruch.
Spätestens beim Öffnen einer Textdatei in einem Editor fällt dieser kleine, aber feine Unterschied auf: Eine unter Windows erstellte Textdatei zeigt im Vim beispielsweise überall ^M-Zeichen (Abbildung 2). Eine mögliche Lösung bieten die beiden Shell-Tools dos2unix (sprich: "DOS to Unix") und unix2dos ("Unix to DOS"). Wie der Name vermuten lässt, wandeln sie Dateien von einem ins andere Format um.
Unter einigen Linux-Distributionen kommen die beiden Helfer in jeweils eigenen Paketen daher; aktuelle Debian-Versionen liefern stattdessen das Paket tofrodos aus, das die beiden Programme fromdos und todos enthält. Hier weisen zwei symbolische Links von /usr/bin/dos2unix und /usr/bin/unix2dos auf die verwandten Tools, sodass der Benutzer einerseits wie gewohnt mit dos2unix und unix2dos, aber auch mit fromdos und todos arbeiten kann. Die Programme leisten grundsätzlich dasselbe, an einigen Stellen weichen sie allerdings voneinander ab. Der Artikel spricht im Folgenden von dos2unix/unix2dos (da der Aufruf ja auch auf Debian-Systemen funktioniert) und erklärt die jeweils abweichenden Optionen.



