split — Dateien in kleinere Teile zerlegen

Praxis-Guide zu split — große Dateien nach Zeilenzahl, Byte-Größe oder Anzahl der Teile zerlegen. Für Verarbeitung, Transfer und parallele Jobs.

split zerlegt eine Datei in mehrere kleinere Stücke – wahlweise nach Zeilenzahl (-l), Byte-Größe (-b) oder einer festen Anzahl von Teilen (-n). Das ist praktisch, um riesige Logdateien handhabbar zu machen, große Archive für den Transfer zu stückeln oder Daten für die parallele Verarbeitung aufzuteilen. Die Teile erhalten standardmäßig einen alphabetischen Suffix (xaa, xab, …), den du über ein eigenes Präfix sowie numerische Suffixe und Endungen anpasst. Wieder zusammensetzen kannst du die Stücke schlicht mit cat, solange du die Reihenfolge beibehältst.

Nach Zeilen aufteilen

split -l <n> <file> — Teilt die Datei in Stücke mit je n Zeilen.

split -l 1000 largefile.txt

split -l <n> <file> <prefix> — Teilt mit einem eigenen Ausgabe-Präfix.

split -l 500 data.csv part_

split -l 1 <file> — Schreibt jede Zeile in eine eigene Datei.

split -l 1 urls.txt url_

Nach Größe aufteilen

split -b <size> <file> — Teilt in Stücke der angegebenen Byte-Größe (Suffixe K, M, G).

split -b 10M largefile.tar.gz chunk_

split -C <size> <file> — Teilt an Zeilengrenzen und hält die Stücke unter der Größengrenze.

split -C 1M logfile.txt log_

split -b 100K <file> <prefix> — Teilt in 100-KB-Stücke mit einem eigenen Präfix.

split -b 100K backup.sql sql_

Nach Anzahl aufteilen

split -n <n> <file> — Teilt in genau n Dateien von ungefähr gleicher Größe.

split -n 5 largefile.txt part_

split -n l/<n> <file> — Teilt in n Dateien, ohne Zeilen zu zerteilen.

split -n l/4 data.csv quarter_

split -n r/<n> <file> — Verteilt Zeilen reihum (Round-Robin) auf n Dateien.

split -n r/3 tasks.txt worker_

Ausgabeoptionen

split -d <file> — Verwendet numerische Suffixe (00, 01, 02 …) statt alphabetischer (aa, ab, ac …).

split -d -l 1000 data.csv part_

split -a <n> <file> — Legt die Suffixlänge fest (Standard: 2).

split -a 4 -l 100 huge.txt piece_

split --additional-suffix='.txt' <file> — Hängt den Ausgabedateien eine Dateiendung an.

split -l 500 --additional-suffix='.csv' data.csv part_

split --verbose <file> — Gibt für jede erzeugte Ausgabedatei eine Meldung aus.

split --verbose -l 1000 data.txt chunk_

split --filter='<cmd>' <file> — Leitet jedes Stück durch einen Befehl, statt es in Dateien zu schreiben.

split -l 1000 --filter='gzip > $FILE.gz' data.txt part_

Typische Anwendungsfälle

split -b 25M file.tar.gz part_ && cat part_* > file.tar.gz — Zerlegt eine große Datei für den Transfer und setzt sie wieder zusammen.

split -b 25M backup.tar.gz upload_ && cat upload_* > backup_restored.tar.gz

split -l 1000 data.csv batch_ && for f in batch_*; do process "$f"; done — Teilt Daten auf und verarbeitet jeden Stapel.

split -l 1000 users.csv batch_ && for f in batch_*; do ./import.sh "$f"; done

wc -l <file> && split -n l/<n> <file> — Prüft die Zeilenzahl und teilt dann gleichmäßig für die parallele Verarbeitung.

wc -l data.csv && split -n l/$(nproc) data.csv worker_

Fazit

split ist das Mittel der Wahl, wenn eine Datei zu groß für ein Werkzeug, einen Upload oder einen Arbeitsspeicher wird. Merke dir den Unterschied zwischen den Modi: -b schneidet hart nach Bytes (kann mitten in einer Zeile trennen), -C und -n l/… respektieren Zeilengrenzen, und -n r/… verteilt reihum. Beim Zusammensetzen kommt es allein auf die Reihenfolge an – cat prefix_* funktioniert, weil die Shell die alphabetischen Suffixe korrekt sortiert; nutze daher genügend Suffixstellen (-a), damit die Sortierung auch bei vielen Teilen stimmt. Prüfe nach dem Wiederzusammensetzen großer Binärdateien am besten die Prüfsumme.

Verwandte Kommandos

  • cut – Felder, Zeichen oder Byte-Bereiche aus Zeilen herausschneiden
  • head – die ersten Zeilen oder Bytes einer Datei anzeigen
  • tail – die letzten Zeilen einer Datei anzeigen oder live mitlesen