Wie setze ich Zeilenumbrüche korrekt um, wenn ich Rsync zwischen Windows und Linux verwende?

Melden
  1. Ursache der Probleme
  2. Möglichkeiten zur Korrektur der Zeilenumbrüche
  3. Verwendung der Option --iconv
  4. Praktischer Workflow zur Zeilenumbruchkorrektur
  5. Zusammenfassung

Beim Synchronisieren von Dateien zwischen Windows- und Linux-Systemen mit rsync ist ein häufig auftretendes Problem die unterschiedliche Behandlung von Zeilenumbrüchen. Windows verwendet für Zeilenumbrüche die Kombination aus Wagenrücklauf und Zeilenvorschub (CRLF, also \r\n), wohingegen Linux und andere Unix-ähnliche Systeme nur den Zeilenvorschub (LF, also \n) nutzen. Dieses unterschiedliche Dateiformat kann bei Textdateien zu Problemen führen, wenn sie von einem System auf das andere übertragen werden.

Ursache der Probleme

Wenn eine Textdatei mit Windows-Zeilenumbrüchen auf ein Linux-System übertragen wird, interpretiert der Linux-Editor oder die Anwendung häufig die zusätzlichen \r-Zeichen als Teil des Textes, was zu merkwürdigem Verhalten, falscher Anzeige oder Problemen in Skripten führen kann. Umgekehrt erwartet ein Windows-Programm oft die CRLF-Zeilenumbrüche, sodass eine Linux-Datei nur mit LF wiederum nicht korrekt dargestellt werden kann.

Der typische Datenaustausch über rsync überträgt Dateien standardmäßig binär, das heißt, die Zeilenumbrüche werden nicht angepasst. Deshalb ist oft eine Nachbearbeitung erforderlich, um zu gewährleisten, dass Textdateien auf beiden Seiten den jeweils richtigen Zeilenumbruch besitzen.

Möglichkeiten zur Korrektur der Zeilenumbrüche

Da rsync kein integriertes Tool zur automatischen Umwandlung von Zeilenumbrüchen hat, erfolgt die Korrektur üblicherweise außerhalb von rsync. Zwei gängige Ansätze sind denkbar:

Erstens kann nach der Übertragung der Dateien ein Konvertierungswerkzeug auf dem Zielsystem eingesetzt werden, um die Zeilenumbrüche anzupassen. Unter Linux sind beispielsweise die Tools dos2unix (für Umwandlung von Windows- zu Unix-Zeilenumbrüchen) oder unix2dos (für die Gegenrichtung) weit verbreitet. Das kann man nach dem Synchronisieren manuell oder durch Skripte automatisieren.

Zweitens ist es möglich, die Umwandlung bereits während der Übertragung mit rsync zu veranlassen, indem man eine Zwischenverarbeitung der Datenströme einfügt. Hierzu kann man rsync mit speziellen --filter-Optionen oder mit --iconv kombinieren.

Verwendung der Option --iconv

Ab rsync-Version 3.1.0 gibt es die Möglichkeit, die Zeichenkodierung bei der Übertragung mittels --iconv-Option automatisch konvertieren zu lassen. Diese Option wandelt nicht nur Zeichenkodierungen zwischen verschiedenen Zeichensätzen um, sondern kann auch Einfluss auf die Zeilenumbrüche haben, wenn diese Bestandteil des Zeichensatzes oder der Kodierung sind.

Typischerweise wird --iconv=UTF-16LE,UTF-8 zum Beispiel für Unicode-Konvertierungen verwendet, aber für das reine Anpassen der Zeilenumbrüche ist --iconv nicht speziell dafür gedacht. Dennoch kann es helfen, wenn Dateien zwischen Windows- und Linux-Umgebungen mit unterschiedlichen Zeichenkodierungen übertragen werden müssen.

Praktischer Workflow zur Zeilenumbruchkorrektur

Die beste Praxis für eine zuverlässige Handhabung der Zeilenumbrüche besteht darin, rsync wie gewohnt als reines Transfer-Tool zu verwenden und anschließend auf dem Zielsystem eine automatische Konvertierung durchzuführen. Das kann man z.B. durch ein Script realisieren, das nach dem Synchronisieren automatisch dos2unix auf alle Textdateien anwendet.

Beispiel: Wenn man vom Windows-System auf ein Linux-System synchronisiert, könnte man nach der Übertragung folgenden Befehl ausführen:

find /pfad/zum/zielverzeichnis -type f -exec dos2unix {} \;

Dies stellt sicher, dass alle übertragenen Dateien die Linux-konformen Zeilenumbrüche erhalten. Umgekehrt, wenn man vom Linux-System auf Windows synchronisiert, kann man ebenfalls unix2dos verwenden, falls notwendig.

Zusammenfassung

Rsync behandelt Dateien standardmäßig binär, wodurch Zeilenumbrüche nicht automatisch angepasst werden. Da Windows und Linux unterschiedliche Zeilenumbruchformate verwenden, sollten Textdateien nach der Übertragung konvertiert werden, um Darstellungs- und Funktionsprobleme zu vermeiden.

Ein bewährter Weg ist, die Anpassung mit Tools wie dos2unix (für Windows->Linux) oder unix2dos (für Linux->Windows) auf dem Zielsystem durchzuführen. Die --iconv-Option von rsync kann helfen, wenn auch Zeichencodierungen geändert werden müssen, ist aber keine universelle Lösung für Zeilenumbruchprobleme.

So erreichen Sie eine saubere und fehlerfreie Handhabung der Zeilenumbrüche beim Datenaustausch zwischen Windows und Linux per rsync.

0

Kommentare