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.
Die Ausgabedatei ist also beispielsweise new_file_aa, nicht nur aa. Das Präfix bleibt bei jeder Teil-Datei erhalten.
Wichtige Optionen
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:
500für 500 Bytes500bfür eine GNU-Coreutils-Größenangabe mit dem Suffixb; die genaue Bedeutung der Suffixe hängt von der verwendetensplit-Implementierung ab1mfü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.txtDas 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_aahead new_file_aatail new_file_abwc -l new_file_aanl new_file_aacat 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.txtDie 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.txtGibt 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
- Wähle ein eindeutiges Präfix, beispielsweise
upload_part_. - Teile die Datei nach Größe mit
-boder nach Zeilen mit-l. - Liste die erzeugten Dateien mit
lsauf. - Kontrolliere Größen, Zeilen oder Inhalte mit
ls -lh,wc,head,tailodernl. - Füge die Teile bei Bedarf mit
catin der richtigen Reihenfolge zusammen. - Verifiziere das Ergebnis mit
cmpoder 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
splitzerlegt, komprimiert aber nicht.-bteilt nach Byte-Größe.-lteilt 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.