VMware ESXi and vSphere Cluster Management

Linux split-Befehl: Dateien nach Größe oder Zeilenzahl aufteilen

Lerne, wie du Linux-Dateien mit split nach Byte-Größe oder Zeilenzahl aufteilst, die Teil-Dateien prüfst und wieder korrekt zusammensetzt.

Mit dem Linux-Befehl split zerlegst du eine Eingabedatei in mehrere fortlaufende Teil-Dateien. Das ist praktisch, wenn eine Datei zu groß für einen E-Mail-Anhang oder Upload ist, wenn sie einfacher übertragen werden soll oder wenn du große Datenmengen schrittweise verarbeiten möchtest.

Wichtig: split teilt Dateien nur auf. Es komprimiert sie nicht. Für kleinere Übertragungsdateien kombinierst du es bei Bedarf mit Werkzeugen wie gzip oder zip.

Grundsyntax von split

Die allgemeine Syntax lautet:

split [Optionen] Eingabedatei [Präfix]

Die Eingabedatei ist die ursprüngliche Datei, die geteilt werden soll. Das optionale Präfix ist der gemeinsame Namensanfang aller erzeugten Ausgabedateien. Ohne eigenes Präfix verwendet split ein Standardpräfix, typischerweise x.

Ein einfacher Aufruf sieht so aus:

split file.txt new_file_

Damit wird file.txt in mehrere Dateien aufgeteilt, deren Namen mit new_file_ beginnen.

Automatische Namenssuffixe

An das Präfix hängt split automatisch ein Suffix an. Ein Suffix ist der Kennzeichner am Ende eines Dateinamens, mit dem die einzelnen Teile unterschieden werden. Standardmäßig beginnt die Folge alphabetisch mit aa, ab, ac und setzt sich entsprechend fort.

Gewähltes Präfix | Erste Teil-Datei | Zweite Teil-Datei

new_file_ | new_file_aa | new_file_ab

part_ | part_aa | part_ab

Die Ausgabedatei ist also beispielsweise new_file_aa, nicht nur aa. Das Präfix bleibt bei jeder Teil-Datei erhalten.

Wichtige Optionen

Option | Zweck | Beispiel

-b | Teilt nach maximaler Dateigröße in Bytes beziehungsweise Größenangaben. | split -b 500b file.txt part_

-l | Teilt eine Textdatei nach der Anzahl der Zeilen je Teil-Datei. | split -l 1 file.txt line_

Nach Byte-Größe mit -b aufteilen

Mit -b legst du fest, wie groß eine Teil-Datei höchstens werden darf. Die Größe kann als Zahl in Bytes oder mit einer Größeneinheit angegeben werden.

split -b 500b file.txt part_

Das erzeugt Teil-Dateien mit höchstens der angegebenen Größe. Die letzte Teil-Datei enthält möglicherweise nur den verbleibenden Rest und ist deshalb kleiner.

Gebräuchliche Schreibweisen sind:

  • 500 für 500 Bytes
  • 500b für eine GNU-Coreutils-Größenangabe mit dem Suffix b; die genaue Bedeutung der Suffixe hängt von der verwendeten split-Implementierung ab
  • 1m für eine Größenangabe von etwa einem MByte beziehungsweise MiB, abhängig von der Implementierung

Wenn du bei GNU/Linux exakt 55 einzelne Bytes angeben möchtest, ist split -b 55 file.txt new_file_ die eindeutigere Schreibweise. Der in vielen Beispielen verwendete Aufruf lautet:

split -b 55b file.txt new_file_

Er erzeugt Dateien wie new_file_aa und new_file_ab. Prüfe bei exakten Größenlimits die lokale split-Dokumentation mit man split, weil Größen-Suffixe je nach Implementierung unterschiedlich interpretiert werden können.

Beispiel: 500-Byte-Teile

split -b 500b file.txt part_

Jede erzeugte Datei enthält höchstens die konfigurierte Teilgröße; der letzte Teil kann kleiner ausfallen.

Beispiel: Teile von 1 MByte

split -b 1m file.txt upload_part_

Die Ausgabe beginnt dann beispielsweise mit upload_part_aa, upload_part_ab und weiteren Teilen.

Nach Zeilen mit -l aufteilen

Mit -l bestimmst du, wie viele Textzeilen in jede Ausgabedatei gelangen:

split -l 1 file.txt line_

Bei diesem Beispiel enthält jede Teil-Datei genau eine Zeile, sofern noch genügend Zeilen vorhanden sind. Anders als bei -b wird nicht die Byte-Größe begrenzt. Zeilen können unterschiedlich lang sein, daher können die Teil-Dateien sehr unterschiedliche Größen haben.

Das Aufteilen nach Zeilen eignet sich besonders für:

  • Protokolldateien
  • Listen
  • CSV-ähnliche Textdaten
  • andere zeilenorientierte Dateien

-l trennt vollständige Zeilen. Eine Zeile wird nicht mitten im Text geteilt. Für ein Größenlimit, bei dem die Byte-Anzahl entscheidend ist, verwendest du stattdessen -b.

Zeilen vorab nummeriert anzeigen

Mit nl kannst du die Zeilen einer Textdatei nummeriert darstellen:

nl file.txt

Das hilft dir zu kontrollieren, welche Zeilen in den einzelnen Teil-Dateien landen. nl verändert die Eingabedatei dabei nicht; es nummeriert die Darstellung auf der Standardausgabe.

Erzeugte Teil-Dateien prüfen

Liste die Dateien nach dem Aufteilen mit ls auf:

ls new_file_*

Die Shell ersetzt den Platzhalter * durch passende Dateinamen. Mit ls -lh werden die Größen besser lesbar angezeigt:

ls -lh new_file_*

Bei Textdateien kannst du die Inhalte oder ihre Grenzen kontrollieren:

cat new_file_aa
head new_file_aa
tail new_file_ab
wc -l new_file_aa
nl new_file_aa

cat zeigt Dateien an oder hängt sie aneinander. head zeigt den Anfang, tail das Ende und wc -l zählt Zeilen. nl ergänzt Zeilennummern für eine übersichtliche Kontrolle.

Teil-Dateien wieder zusammensetzen

Die Teile lassen sich mit cat wieder in eine Datei schreiben:

cat new_file_* > restored_file.txt

Die Shell expandiert new_file_* normalerweise in alphabetischer Reihenfolge. Dadurch werden new_file_aa, new_file_ab und die weiteren Teile nacheinander zusammengefügt.

Die Reihenfolge ist entscheidend. Fehlt ein Teil oder wird ein Suffix an der falschen Stelle eingefügt, ist die zusammengesetzte Datei nicht identisch mit dem Original. Achte außerdem darauf, dass der Platzhalter keine fremden Dateien mit demselben Präfix erfasst.

Nach dem Zusammensetzen kannst du die Dateien mit cmp vergleichen:

cmp file.txt restored_file.txt

Gibt cmp keine Meldung aus, sind die Dateien byteweise gleich. Alternativ kannst du vor und nach dem Zusammensetzen eine Prüfsumme bilden und vergleichen.

Praktischer Ablauf

  1. Wähle ein eindeutiges Präfix, beispielsweise upload_part_.
  2. Teile die Datei nach Größe mit -b oder nach Zeilen mit -l.
  3. Liste die erzeugten Dateien mit ls auf.
  4. Kontrolliere Größen, Zeilen oder Inhalte mit ls -lh, wc, head, tail oder nl.
  5. Füge die Teile bei Bedarf mit cat in der richtigen Reihenfolge zusammen.
  6. Verifiziere das Ergebnis mit cmp oder einer Prüfsumme.

Fehlerbehebung

Die erwarteten Dateinamen erscheinen nicht

Wahrscheinlich wurde das Präfix anders angegeben oder gar kein eigenes Präfix verwendet. Prüfe den letzten Parameter des Befehls und liste anschließend das aktuelle Verzeichnis mit ls auf.

Nicht alle Teil-Dateien sind gleich groß

Das ist normalerweise korrekt: Der letzte Teil enthält nur den verbleibenden Rest und kann kleiner als die konfigurierte Größe sein. Kontrolliere die tatsächlichen Größen mit:

ls -lh part_*

Beim Aufteilen nach Zeilen entstehen unterschiedlich große Dateien

-l zählt Zeilen, nicht Bytes. Unterschiedlich lange Zeilen führen daher zu unterschiedlich großen Ausgabedateien. Verwende -b, wenn ein Größenlimit maßgeblich ist.

Die zusammengesetzte Datei ist beschädigt

Prüfe, ob alle Teile vorhanden sind und ob sie in der richtigen Suffix-Reihenfolge zusammengeführt wurden. Verwende anschließend cmp für den Vergleich mit der Originaldatei.

Vorhandene Dateien wurden überschrieben

Ein bereits verwendetes Präfix kann zu denselben Ausgabedateinamen führen. Prüfe die Dateien vorher mit ls und verwende ein eindeutiges Präfix für jeden Aufteilungsvorgang.

Merksätze

  • split zerlegt, komprimiert aber nicht.
  • -b teilt nach Byte-Größe.
  • -l teilt nach Zeilen und bewahrt vollständige Zeilen.
  • Das Präfix bestimmt den gemeinsamen Beginn der Ausgabedateinamen.
  • Beim Zusammensetzen muss die Suffix-Reihenfolge stimmen.

Weitere Informationen findest du im Überblick zum Linux-split-Befehl.